关于tymon/jwt-auth一些疑问

因为项目中要使用到令牌,在社区中搜索了下好像大多数都是tymon/jwt-auth插件
ps:之前项目都是使用原生的php jwt类生成的

有疑虑的问题
因为用户表不用laravel自带的users,所以就没有name,password,remember_token字段,
比如我单独传入member_id字段或者用户相关的数据能相对应的生成token出来吗

或者有其他类似的新扩展也可以推荐一下 蟹蟹

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
laravel_peng
最佳答案
因为用户表不用 laravel 自带的 users, 所以就没有 name,password,remember_token 字段 。
  1. 你可以不用 Laravel 自带的 User 模型的,你可以自定义的模型字段。
  2. User 模型拥有那些字段,是因为它继承了一个 Authenticatable 基类,基类引入了一些 Trait 需要这些字段,代码如下:

file

Illuminate\Foundation\Auth\User 基类的代码就是很多 Trait 的引用。当然你的用户模型可以不用这些继承,然后就不需要你上面说的那些字段。

file

比如我单独传入 member_id 字段或者用户相关的数据能相对应的生成 token 出来吗 ?

我想说可以的,只不过你需要修改几个地方。

  1. 你创建一个自己的用户模型,暂定为 App\Models\Member
  2. Member 类继承 jwtJWTSubject trait, 并实现它的方法。
    <?php
    namespace App\Models;
    use Tymon\JWTAuth\Contracts\JWTSubject;
    class Memeber implements JWTSubject
    {...}
  3. 修改 config/auth.php 配置文件 api 相关的门卫 guard 和 提供者 providers 配置。
    'guards' => [
         ...
         /* 'api' => [
             'driver' => 'token',
             'provider' => 'users',
             'hash' => false,
         ], */
         'api' => [
             'driver' => 'jwt',
             'provider' => 'members',
         ],
     ],
    'providers' => [
        /* 'users' => [
             'driver' => 'eloquent',
             'model' => App\Models\User::class,
         ],*/
         'members' => [
             'driver' => 'eloquent',
             'model' => App\Models\Member::class,
         ]
     ],
  4. 然后接下来通过 Auth 类的 guard() 方法中的 loginUsingId() 方法来使用 member_id 进行来验证登录,返回 Token
     public function store(AuthorizationRequest $request)
     {
          // 这里就可以获取 token, Auth 类的 guard() 方法引入了很多接口方法,有的通过  password, 有通过模型主键 id 获取验信息的。
          //Auth::guard('api') 这里要指定好用的是 `api` 的门卫,不然不走你的自定义模型
          $token =  Auth::guard('api')->loginUsingId($request->input('member_id'))
     }
  5. 附带上 Learnku 社区的 jwt的wiki链接
2年前 评论
laravel_peng (作者) 2年前
ta_ta (楼主) 2年前
讨论数量: 5

可以用 user 模型生成 token

2年前 评论

其实如果你对 jwt-auth 了解的够多的话,你就了解,实质上他是对 id 生成的 token。然后反解析后,通过获取到的ID进行读取 user表。

2年前 评论
laravel_peng
因为用户表不用 laravel 自带的 users, 所以就没有 name,password,remember_token 字段 。
  1. 你可以不用 Laravel 自带的 User 模型的,你可以自定义的模型字段。
  2. User 模型拥有那些字段,是因为它继承了一个 Authenticatable 基类,基类引入了一些 Trait 需要这些字段,代码如下:

file

Illuminate\Foundation\Auth\User 基类的代码就是很多 Trait 的引用。当然你的用户模型可以不用这些继承,然后就不需要你上面说的那些字段。

file

比如我单独传入 member_id 字段或者用户相关的数据能相对应的生成 token 出来吗 ?

我想说可以的,只不过你需要修改几个地方。

  1. 你创建一个自己的用户模型,暂定为 App\Models\Member
  2. Member 类继承 jwtJWTSubject trait, 并实现它的方法。
    <?php
    namespace App\Models;
    use Tymon\JWTAuth\Contracts\JWTSubject;
    class Memeber implements JWTSubject
    {...}
  3. 修改 config/auth.php 配置文件 api 相关的门卫 guard 和 提供者 providers 配置。
    'guards' => [
         ...
         /* 'api' => [
             'driver' => 'token',
             'provider' => 'users',
             'hash' => false,
         ], */
         'api' => [
             'driver' => 'jwt',
             'provider' => 'members',
         ],
     ],
    'providers' => [
        /* 'users' => [
             'driver' => 'eloquent',
             'model' => App\Models\User::class,
         ],*/
         'members' => [
             'driver' => 'eloquent',
             'model' => App\Models\Member::class,
         ]
     ],
  4. 然后接下来通过 Auth 类的 guard() 方法中的 loginUsingId() 方法来使用 member_id 进行来验证登录,返回 Token
     public function store(AuthorizationRequest $request)
     {
          // 这里就可以获取 token, Auth 类的 guard() 方法引入了很多接口方法,有的通过  password, 有通过模型主键 id 获取验信息的。
          //Auth::guard('api') 这里要指定好用的是 `api` 的门卫,不然不走你的自定义模型
          $token =  Auth::guard('api')->loginUsingId($request->input('member_id'))
     }
  5. 附带上 Learnku 社区的 jwt的wiki链接
2年前 评论
laravel_peng (作者) 2年前
ta_ta (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!