本人菜鸟 , 对jwt也是基本的认识,在自己的项目中也是基本的实现,这里是对初始jwt的小伙伴的分享,大佬请乘坐《和谐号》前往下一站
以下的观点(都是个人的浅浅理解)如有不对的地方欢迎指点~~~~~~~~
JWT(Json Web Tokens ): 一个非常轻巧的规范, 适用于前端用户和服务之间传递安全可靠的信息,可以使用传递的信息认证当前登录用户信息 官方文档请点这里
第一步 使用composer安装jwt 在composer.json文档中添加(Laravel 5.5 + 版本会自动发现该扩展包)
"require": { "php": ">=7.0.0", "fideloper/proxy": "~3.3", "laravel/framework": "5.5.*", "laravel/tinker": "~1.0", "tymon/jwt-auth": "1.*@rc" //建议使用1.0以上的版本 },
安装成功后 在项目根目录vendor下会有一个tymon的文件夹
如果你的laravel版本在5.4及以下版本需要多设置如下几步
1: 在config/app.php配置文件注册服务提供者
TymonJWTAuthProvidersJWTAuthServiceProvider::class
2:再注册需要用到的对应门面
'JWTAuth' => TymonJWTAuthFacadesJWTAuth::class 'JWTFactory' => TymonJWTAuthFacadesJWTFactory::class
第二步 使用这个命令 在config目录下生成一个jwt.php的配置文件
php artisan vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"
第三步 使用这个命令 会在 .env文件中生成一个加密的密钥 例如: JWT_SECRET=rDYnuDQ69IFUjr1hKDiZ2W4ZOFfklyScpdh1qMadpzZX7u************
php artisan jwt:secret
第四步 修改config/auth.php文件
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], //后台 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ], //前端模块 'home' => [ 'driver' => 'jwt', //这里记得要修改 默认是session 'provider' => 'homeuser', //这里在下面对应的配置 ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => AppUser::class, ], 'admins' => [ 'driver' => 'eloquent', 'model' => HiCommonModelAuthAdmins::class, ], //前端的配置 'homeuser' => [ 'driver' => 'eloquent', 'model' => HiCommonModelUser::class, //这里是用户表对应的模型 ] ],
第五步 创建用户表模型
<?php namespace HiCommonModel; //这里命名空间需要换成你的命名空间 use IlluminateNotificationsNotifiable; use TymonJWTAuthContractsJWTSubject; use IlluminateFoundationAuthUser as Authenticatable; class HomeUser extends Authenticatable implements JWTSubject { use Notifiable; protected $table = 'users'; protected $guarded = []; /** * Get the identifier that will be stored in the subject claim of the JWT. * * @return mixed */ public function getJWTIdentifier() { return $this->getKey(); } /** * Return a key value array, containing any custom claims to be added to the JWT. * * @return array */ public function getJWTCustomClaims() { return []; } }
第六步 定义路由(这里就不贴了 能访问到就行) 请求服务
/** * 用户登录生成token * $arr_input array * $arr_input['unsername'] string 账户 * $arr_input['password'] string 密码 * return string 生成的token **/ public function user_login( array $arr_input ){ //这里需要对$arr_input进行数据验证 $token = home_guard()->attempt( $arr_input ); //token最终生成的格式 xxxxx.yyyyy.zzzzz(头部.载荷.签名) 错误的话会返回一个false $arr_token = [ 'access_token' => $token, 'token_type' => 'bearer', 'expires_in' => home_guard()->factory()->getTTL() * 60 ]; return $arr_token; } //这个我是放在公共的function中的 所以直接调用 function home_guard(){ return IlluminateSupportFacadesAuth::guard('home'); }
第七步 请求成功后得到token值后 , 可以使用这个token值或者当前登录用户的详细信息,这样就不用明文的传递用户的uid 服务端不会直接获取前端传递的uid了 可以直接使用token值 服务能直接
获取到用户信息 , 你可以把token信息放在header 里 (建议这样做)
获取用户的详细信息
public function user_info(){ return home_guard()->user(); }
这里jwt的基本使用就结束了, 记录的都是使用流程, 没有高大上的东西,相信初始者能看懂
这里附上大佬的文章https://blog.csdn.net/qq_24935119/article/details/90670878