在上一篇,我们学习了如何让你的laravel跑起了,到了这一篇,我们来学习一下如何让你的项目拥有登录功能
我们本次登录使用的鉴权方式是Token
什么是Token
token 通过一次登录验证,得到一个鉴权字符串,然后以后带着这个鉴权字符串进行后续操作,这样就可以解决每次请求都要带账号密码的问题,而且也不需要反复使用账号和密码。
本次我们学习登录,使用的是JSON Web Token 简称jwt!
什么是jwt?
JWT 全称 JSON Web Tokens ,是一种规范化的 token。可以理解为对 token 这一技术提出一套规范
首先我们进入项目目录下面执行composer命令(composer安装方法点击查看):composer require tymon/jwt-auth
到此便是jwt安装成功
我们继续键入命令php artisan vendor:publish –provider=”Tymon\JWTAuth\Providers\LaravelServiceProvider” 这条命令会在我们项目的config文件中新建jwt.confg 文件
在我们配置发布成功后需要继续执行下一条命令:php artisan jwt:secret来生成密匙
我们需要在用户模型里面使用implements实现对应的接口类
继续实现接口类中的方法,因为interface类的特性,我们在子类中必须实现它的方法
我们打开配置文件:config/auth.php进行处理:
1.我们把guards的key改为api,默认验签为api
2.然后driver改为jwt
3.provider可以自己取名,我这里取名users因为是user表为用户表,方便维护
4.文件往下的providers中定义我们刚刚guards中命名的provider的字段
5.在providers中的driver中本次取用的是模型eloquent验证,这个根据自身需要
6.model为我们用户的模型命名空间
以上具体为下图
示例:
return ['guards' => ['api' => ['driver' => 'jwt','provider' => 'users']],'providers' => ['users' => ['driver' => 'eloquent','model' => App\Models\User::class,],],];
最后我们新建一个AuthController控制器并创建login方法:
<?phpnamespace App\Http\Controllers\Admin;use App\Http\Controllers\Controller;use Illuminate\Http\JsonResponse;class AuthController extends Controller{public function login(): JsonResponse{$credentials = request(['email', 'password']);if (! $token = auth()->guard('api')->attempt($credentials)) {return response()->json(['error' => 'Unauthorized'], 401);}return response()->json(['access_token' => $token,'token_type' => 'bearer','expires_in' => auth()->factory()->getTTL() * 60]);}}
完成后我们需要在数据库写入一条用户数据:
在命令行中执行一条:php artisan make:seeder UserSeeder可以在database/seeders目录下得到一个迁移文件
直接在里面塞入数据:
php<?phpnamespace Database\Seeders;use App\Models\User;use Illuminate\Database\Seeder;use Illuminate\Support\Str;class UserSeeder extends Seeder{/*** Run the database seeds.** @return void*/public function run(){$data = ['name' => '无所谓','email' => '12345@php.cn','email_verified_at' => now(),'password' => bcrypt('123456'), // password'remember_token' => Str::random(10),];User::query()->create($data);}}
然后继续执行:php artisan db:seed --class=UserSeeder
我们就得到了一条用户数据
最后我们用工具进行模拟请求就可以直接拿到本次登录的Token了:
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号