面试题 / 6 / 6 / 创建于 3年前
如题
话说 Auth,那肯定避不开 Guard
Auth
那聊到 Guard ,则肯定避不开 Request
底层逻辑很简单,自带 有两种 guard
api 、web
当默认不配置的gard的时候,则我们会自动读取响应 路由文件。
例如
从 web.php 路由进来,则使用 web guard
从 api.php 路由进来,则使用 api guard
当然,你也可以在 中间件中 重新修改 其 guard
参考如下代码
$user = null; // 获取cookie,将cookie放置到header 供jwt进行验证 if($token = $request->get('token')) { $user = auth(env('MODULE_LOGIN_GUARD'))->setToken($token)->user(); // 重置解析器,修改当前默认 Guard 用户 $request->setUserResolver(function ($guard = null) { return auth(env('MODULE_LOGIN_GUARD'))->user(); }); } if($user) { return $next($request); }
核心代码: setUserResolver
Auth 原理,我是把它理解为一个中间件,拦截请求,然后检测请求头部的 token是否合法,token的解析就是一个加密与解密的过程。
Auth 方式的实现为,假设 guard 为 web
那么他的请求过程为
1、经过 auth 中间件
1、登录,Laravel 提供了 attempt 方法,验证通过后,设置当前 session 为某个登录用户
感觉这个问题没啥好说的,就简单的那几个东西,主要是 session_id, 只不过 Laravel 层面将 这一层掩盖了
我要举报该,理由是:
话说
Auth
,那肯定避不开 Guard那聊到 Guard ,则肯定避不开 Request
底层逻辑很简单,自带 有两种 guard
api 、web
当默认不配置的gard的时候,则我们会自动读取响应 路由文件。
例如
从 web.php 路由进来,则使用 web guard
从 api.php 路由进来,则使用 api guard
当然,你也可以在 中间件中 重新修改 其 guard
参考如下代码
核心代码: setUserResolver
Auth 原理,我是把它理解为一个中间件,拦截请求,然后检测请求头部的 token是否合法,token的解析就是一个加密与解密的过程。
Auth 方式的实现为,假设 guard 为 web
那么他的请求过程为
1、经过 auth 中间件
2、中间件读取当前 session,根据session 判断用户是否已登录
1、登录,Laravel 提供了 attempt 方法,验证通过后,设置当前 session 为某个登录用户
感觉这个问题没啥好说的,就简单的那几个东西,主要是 session_id, 只不过 Laravel 层面将 这一层掩盖了