本人菜鸟 , 对jwt也是基本的认识,在自己的项目中也是基本的实现,这里是对初始jwt的小伙伴的分享,大佬请乘坐《和谐号》前往下一站
以下的观点(都是个人的浅浅理解)如有不对的地方欢迎指点~~~~~~~~
JWT(Json Web Tokens ): 一个非常轻巧的规范, 适用于前端用户和服务之间传递安全可靠的信息,可以使用传递的信息认证当前登录用户信息 官方文档请点这里
第一步 使用composer安装jwt 在composer.json文档中添加
"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的文件夹
第二步 使用这个命令 在config目录下生成一个jwt.php的配置文件
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
第三步 使用这个命令 会在 .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‘ => App\User::class,
],
‘admins‘ => [
‘driver‘ => ‘eloquent‘,
‘model‘ => \HiCommon\Model\AuthAdmins::class,
],
//前端的配置
‘homeuser‘ => [
‘driver‘ => ‘eloquent‘,
‘model‘ => \HiCommon\Model\User::class, //这里是用户表对应的模型
]
],
第五步 创建用户表模型
<?php
namespace HiCommon\Model; //这里命名空间需要换成你的命名空间
use Illuminate\Notifications\Notifiable;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Foundation\Auth\User 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 \Illuminate\Support\Facades\Auth::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
原文:https://www.cnblogs.com/hinq/p/12155570.html