Laravel8 利用passport实现登录和JWT生成(生成Token)
1.安装passport插件
composer require laravel/passport
或
composer require laravel/passport "^9.0"
2.执迁迁移文件,生成数据表,保存token数据
php artisan migrate
3.生成客户端授权码 注:secret保存起来
php artisan passport:install
4.修改接口账号模型
5.修改config/auth.php文件中的api配置
6.令牌的有效期
在app/Proivders/AuthServiceProvide.php文件中的boot方法添加有效期
use Laravel\Passport\Passport;
// token认证有效期2小时
Passport::tokensExpireIn(now()->addHour(2));
// 刷新token认证有效期30天
Passport::refreshTokensExpireIn(now()->addDays(30));
7.解决auth在接口中登录没有attempt问题
8.实现登录,并且注意,如果登录不成功,数据返回符合restful规范
9. 接口token生成
生成接口验证token在登录成功后生成
此处附上代码
public function login(Request $request){
//表单验证
//异步获取 ajax 和 接口会用
try {
$this->validate($request,[
'username' => 'required',
'password' => 'required',
]);
}catch (\Exception $exception){
return response()->json(['code'=>1,'msg'=>'账号或密码不能为空'],400);
}
//查看对象中可用的方法
//dump(get_class_methods());die;
$data = $request->all();
unset($data['_token']);
$bool = auth()->guard('apiweb')->attempt($data);
//账号登录成功
if ($bool){
//得到用户模型对象
$userModel = auth()->guard('apiweb')->user();
//生成token 保存在服务器端1份 给客户返回1份
$token = $userModel->createToken('api')->accessToken;
$data = [
'expire' => 7200,
'token' => $token
];
return response()->json($data);
}else{
return response()->json(['code'=>2,'msg'=>'账号或密码不正确'],401);
}
}
10.postman测试得到了token
11 .接口安全验证
使用了jwt进行验证
需要对接口路由绑定中间件,前提是auth.php文件中的一定要把api节点中的driver更换为passport
在定义路由中绑定jwt认证中间件
postman测试