Lumen6 /laravel 框架路由请求实现token验证
版本
Lumen6.0
中文文档:https://learnku.com/docs/lumen/5.7/cache/2411
实现功能效果
使用缓存存储用户token
从请求头head 中获取用户token
返回指定的认证失败结构体
对指定的接口路由做身份验证
第一步:解除注释
注意:
在使用 Lumen 的认证功能前,
取消
bootstrap/app.php
文件中的AuthServiceProvider
调用代码的注释。去掉
bootstrap/app.php
文件中$app->withFacades()
方法调用的注释。去掉
bootstrap/app.php
文件中 $app->routeMiddleware([
'auth' => App\Http\Middleware\Authenticate::class,
]); 注释
第二步:接口路由验证身份 routes/web.php
post('/user/login', 'UserController@login'); //登录$router->group(['middleware' => ['auth']], function () use ($router) { $router->get('/user/info', 'UserController@user_info'); //获取用户信息});
第三步:修改验证器方法 App\Providers\AuthServiceProvider.php
app['auth']->viaRequest('api', function ($request) {// if ($request->input('api_token')) {// return User::where('api_token', $request->input('api_token'))->first();// }// }); $this->app['auth']->viaRequest('api', function ($request) { //从消息头获取传入的token $token = $request->headers->get('Authorization'); $a = explode(" ", $token); if (isset($a[1]) && $a[1]) { $token = $a[1]; } //token验证通过返回当前认证用户// $token = UserToken::where('token',$token)->first(); //从缓存中获取用户id $user_id = AuthCache::get_token_user_id($token); if($user_id){ //返回user模型 return User::where('id',$user_id)->first(); } return null; }); }}
以上方式是通过缓存中查询token的,此处也可以改成数据库中查询,或者使用jwt解析
原理就是通过请求接口传输过来的token信息,通过token查询到关联的用户id,然后再查询用户信息,返回整个用户模型,之后就可以使用Auth::user() 拿到用户数据
第四步:查看user model模型下的内容,正常安装后是不需要改动的,这里我继承了一个自己写的BaseModel父类。
第五步:修改认证失败后的,返回结构App/Http/Middleware/Authenticate.php
看一下默认返回结构
修改后返回结构,这里可以自定义,正常情况我们应在项目定义一个全局的返回结构体方法提供使用。
auth = $auth; } public function handle($request, Closure $next, $guard = null) { if ($this->auth->guard($guard)->guest()) { //这是默认的返回结构// return response('Unauthorized.', 401); //修改返回结构 return response()->json([ 'code'=>404, 'msg'=>'无效的token', 'data'=>[] ]);// Common::response_result(StatusConstants::ERROR_UNAUTHORIZED_TOKEN,'无效的token'); } //验证通过 return $next($request); }}
来源地址:https://blog.csdn.net/qq_24909089/article/details/130138039
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341