Laravel sanctum 检查用户是不是在没有重定向的情况下通过身份验证

Posted

技术标签:

【中文标题】Laravel sanctum 检查用户是不是在没有重定向的情况下通过身份验证【英文标题】:Laravel sanctum check if user is authenticated without redirectingLaravel sanctum 检查用户是否在没有重定向的情况下通过身份验证 【发布时间】:2021-10-20 09:37:38 【问题描述】:

我正在为我的 API 使用 Laravel sanctum。

如何检查用户是否通过 sanctum 中间件进行了身份验证但没有重定向?我想检查他是否已通过身份验证,然后执行某些操作,如果没有,则执行其他操作,而不重定向或发送“未经身份验证”消息。

有没有办法直接使用 sanctum 或者我必须手动检查令牌及其到期时间?

【问题讨论】:

你可以在中间件中做类似$request->session->set('is_sanctrum_redirected', true)的东西 这是一个无状态的 api,没有会话,老实说我不知道​​ `` $request->session->set('is_sanctrum_redirected', true) ``` 这意味着什么 嗯,如果它是无状态 api - 你可以在哪里被重定向,对吧?在 api 中你会得到 401 错误,而不是重定向。 是的,我的意思是我不想让请求结束并且用户收到一个 401“未经身份验证”,如果他没有经过身份验证,我想处理并相应地发送一些东西 如果你想重写异常消息 - 你可以在异常处理程序中使用它。 【参考方案1】:

只需从here 获取此函数,将其粘贴到您的 "app/Exceptions/Handler.php" 中,然后根据需要覆盖。

/**
 * Convert an authentication exception into a response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Illuminate\Auth\AuthenticationException  $exception
 * @return \Symfony\Component\HttpFoundation\Response
 */
protected function unauthenticated($request, AuthenticationException $exception)

    // CUSTOMIZE THE BODY AS YOU WANT..

    return $request->expectsJson()
                ? response()->json(['message' => $exception->getMessage()], 401)
                : redirect()->guest($exception->redirectTo() ?? route('login'));

【讨论】:

我不想写异常,我想使用 Auth::user() 或 Auth::check 但除非我把中间件“auth:sanctum”放到那条路线,但问题是,如果我放置中间件并且用户未通过身份验证,他将被 401 消息拒绝,或者在我的情况下,公共对象很少,我想检查用户是否登录或不并相应地发送对象,而不是重写异常。

以上是关于Laravel sanctum 检查用户是不是在没有重定向的情况下通过身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Laravel sanctum 获得合适的用户

如何在没有典型 laravel /login 的情况下使用 laravel sanctum

Laravel 7 Vue 2 Sanctum 登录错误 419; CSRF 令牌不匹配

如何在 Sanctum Laravel 中通过 Token 获取用户

Laravel Sanctum 返回 404 而不是未经身份验证的 401

Laravel Sanctum 令牌()未定义