Laravel 的 Auth 原理?

请尝试在评论区里写下答案(如不能清楚表述,那么你可能没真正理解)。欢迎参与,为下一次求职做准备。

如题

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6

话说 Auth,那肯定避不开 Guard

那聊到 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

2年前 评论
Luson

Auth 原理,我是把它理解为一个中间件,拦截请求,然后检测请求头部的 token是否合法,token的解析就是一个加密与解密的过程。

2年前 评论
surest 2年前
surest 2年前
surest 2年前

Auth 方式的实现为,假设 guard 为 web

那么他的请求过程为

1、经过 auth 中间件

2、中间件读取当前 session,根据session 判断用户是否已登录

1、登录,Laravel 提供了 attempt 方法,验证通过后,设置当前 session 为某个登录用户


感觉这个问题没啥好说的,就简单的那几个东西,主要是 session_id, 只不过 Laravel 层面将 这一层掩盖了

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!