1.安装passport插件
composer require laravel/passport
或
composer require laravel/passport "^9.0"
2.执迁迁移文件,生成数据表,保存token数据
php artisan migrate
3.生成客户端授权码 注:secret保存起来
php artisan passport:install
4.修改接口账号模型
在模型里面引入
use Laravel\Passport\HasApiTokens;
use Illuminate\Foundation\Auth\User as AuthUser;
5.修改config/auth.php文件中的api配置
6.令牌的有效期
在app/Proivders/AuthServiceProvide.php文件中的boot方法添加有效期
use Laravel\Passport\Passport;
public function boot()
{
$this->registerPolicies();
// 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)
{
//验证
$validator = Validator::make($request->all(),[
'username'=>'required',
'password'=>'required',
],[
'username.required'=>'账号不能为空',
'password.required'=>'密码不能为空',
]);
//查看是否通过
if ($validator->fails()){
return ['code'=>500,'msg'=>$validator->errors()->first()];
}
//查询登录
$bool = auth()->guard('apiweb')->attempt($request->all());
if ($bool){
//生成token
//得到用户模型对象
$userModel = auth()->guard('apiweb')->user();
//判断当前用户接口是否超过 2000 次
/* if ($userModel->clicks > 2000){
return ['code'=>500,'msg'=>'当天访问次数已达上限'];
} */
//生成token 保存服务端一份 返回客户一份
$token = $userModel->createToken('api')->accessToken;
//让当前请求加1
// $userModel->increment('clicks');
$data = [
'expire'=>7200,
'token' => $token
];
return ['code'=>200,'msg'=>'登录成功','data'=>$data];
}else{
return ['code'=>500,'msg'=>'登录失败'];
}
}
用接口测试工具 这里用的 postman 测得到token
11 .接口安全验证
使用了jwt进行验证
在定义路由中绑定jwt认证中间件
测试 在Headers 中 加入 Authorization 内容 为 Bearer + 空格 + token