Laravel Sanctum 可选认证实现:允许游客和登录用户访问同一路由

laravel sanctum 可选认证实现:允许游客和登录用户访问同一路由

本文介绍如何在 Laravel 中使用 Sanctum 实现可选认证,允许同一路由既能被游客访问,也能被已登录用户访问。核心思路是检查请求中是否存在 Token,若存在则尝试通过 Sanctum 认证守卫获取用户并设置为当前用户,从而实现用户登录状态的判断。无需使用 auth:sanctum 中间件,即可根据请求头是否存在 Token 来判断用户是否已认证。

在某些场景下,我们需要创建一个可以被游客和已登录用户访问的路由。例如,一个展示文章详情的页面,游客可以浏览,登录用户可以查看更多信息或进行评论。使用 Laravel Sanctum,我们可以很容易地实现这种可选认证。

关键在于,我们不能简单地使用 auth:sanctum 中间件,因为这会强制要求所有访问者都必须提供有效的 API Token。相反,我们需要在路由逻辑中手动检查 Token 的存在性,并尝试进行认证。

以下是实现此功能的步骤:

移除 auth:sanctum 中间件。 确保路由定义中没有使用 auth:sanctum 中间件。

在路由处理函数中检查 Token。 使用 request()->bearerToken() 检查请求头中是否存在 Token。如果存在,则尝试使用 Auth::guard(‘sanctum’)->user() 获取已认证的用户,并使用 Auth::setUser($user) 将其设置为当前用户。

下面是一个示例代码:

use IlluminateSupportFacadesRoute;use IlluminateSupportFacadesAuth;Route::get('optional-auth', function () {    if (request()->bearerToken() && $user = Auth::guard('sanctum')->user()) {        Auth::setUser($user);    }    return Auth::check(); // false for guest users, true if valid token present});

代码解释:

request()->bearerToken(): 尝试从请求头中获取 Bearer Token。如果存在,则返回 Token 字符串,否则返回 null。Auth::guard(‘sanctum’)->user(): 尝试使用 Sanctum 认证守卫获取已认证的用户。如果请求头中存在有效的 Token,则返回 User 对象,否则返回 null。Auth::setUser($user): 将获取到的用户对象设置为当前用户。这使得我们可以在后续代码中使用 Auth::user() 获取到已登录的用户信息。Auth::check(): 检查当前用户是否已认证。如果用户已登录,则返回 true,否则返回 false。

示例用法:

无 Auth Header 的 GET 请求到 /optional-auth: Auth::check() 返回 false,表示用户未登录。带有效 Auth Header 的 GET 请求到 /optional-auth: Auth::check() 返回 true,表示用户已登录。Auth::user() 可以获取到已登录的用户信息。

注意事项:

确保 Sanctum 已正确配置并安装。用户必须拥有有效的 API Token 才能通过认证。在实际应用中,可以根据 Auth::check() 的返回值来执行不同的逻辑,例如显示不同的内容或提供不同的功能。

总结:

通过在路由处理函数中手动检查 Token 的存在性并进行认证,我们可以轻松实现 Laravel Sanctum 的可选认证。这使得我们可以创建灵活的 API 接口,允许游客和已登录用户访问相同的路由,并根据用户的认证状态提供不同的体验。这种方法避免了强制使用 auth:sanctum 中间件带来的限制,提供了更大的灵活性和控制权。

以上就是Laravel Sanctum 可选认证实现:允许游客和登录用户访问同一路由的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1322007.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月12日 08:12:59
下一篇 2025年12月12日 08:13:09

相关推荐

发表回复

登录后才能评论
关注微信