laravel-jwt签发token

编辑: admin 分类: 电脑知识 发布时间: 2023-06-14 来源:互联网

在上一篇,我们学习了如何让你的laravel跑起了,到了这一篇,我们来学习一下如何让你的项目拥有登录功能

鉴权方式

我们本次登录使用的鉴权方式是Token
什么是Token
token 通过一次登录验证,得到一个鉴权字符串,然后以后带着这个鉴权字符串进行后续操作,这样就可以解决每次请求都要带账号密码的问题,而且也不需要反复使用账号和密码。

策略

本次我们学习登录,使用的是JSON Web Token 简称jwt
什么是jwt
JWT 全称 JSON Web Tokens ,是一种规范化的 token。可以理解为对 token 这一技术提出一套规范

安装composer安装

首先我们进入项目目录下面执行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.我们把guardskey改为api,默认验签为api
2.然后driver改为jwt
3.provider可以自己取名,我这里取名users因为是user表为用户表,方便维护
4.文件往下的providers中定义我们刚刚guards中命名的provider的字段
5.在providers中的driver中本次取用的是模型eloquent验证,这个根据自身需要
6.model为我们用户的模型命名空间
以上具体为下图
示例:

  1. return [
  2. 'guards' => [
  3. 'api' => [
  4. 'driver' => 'jwt',
  5. 'provider' => 'users'
  6. ]
  7. ],
  8. 'providers' => [
  9. 'users' => [
  10. 'driver' => 'eloquent',
  11. 'model' => App\Models\User::class,
  12. ],
  13. ],
  14. ];
登录方法

最后我们新建一个AuthController控制器并创建login方法:

  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Controllers\Controller;
  4. use Illuminate\Http\JsonResponse;
  5. class AuthController extends Controller
  6. {
  7. public function login(): JsonResponse
  8. {
  9. $credentials = request(['email', 'password']);
  10. if (! $token = auth()->guard('api')->attempt($credentials)) {
  11. return response()->json(['error' => 'Unauthorized'], 401);
  12. }
  13. return response()->json([
  14. 'access_token' => $token,
  15. 'token_type' => 'bearer',
  16. 'expires_in' => auth()->factory()->getTTL() * 60
  17. ]);
  18. }
  19. }
模拟用户数据

完成后我们需要在数据库写入一条用户数据:
在命令行中执行一条:php artisan make:seeder UserSeeder可以在database/seeders目录下得到一个迁移文件
直接在里面塞入数据:

  1. php
  2. <?php
  3. namespace Database\Seeders;
  4. use App\Models\User;
  5. use Illuminate\Database\Seeder;
  6. use Illuminate\Support\Str;
  7. class UserSeeder extends Seeder
  8. {
  9. /**
  10. * Run the database seeds.
  11. *
  12. * @return void
  13. */
  14. public function run()
  15. {
  16. $data = [
  17. 'name' => '无所谓',
  18. 'email' => '12345@php.cn',
  19. 'email_verified_at' => now(),
  20. 'password' => bcrypt('123456'), // password
  21. 'remember_token' => Str::random(10),
  22. ];
  23. User::query()->create($data);
  24. }
  25. }

然后继续执行:php artisan db:seed --class=UserSeeder
我们就得到了一条用户数据
最后我们用工具进行模拟请求就可以直接拿到本次登录的Token了:

【文章转自:扬州机房 http://www.558idc.com/yz.html欢迎留下您的宝贵建议】