【问题标题】: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“未经身份验证”,如果他没有经过身份验证,我想处理并相应地发送一些东西
  • 如果你想重写异常消息 - 你可以在异常处理程序中使用它。

标签: laravel authentication api-design laravel-sanctum


【解决方案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 消息拒绝,或者在我的情况下,公共对象很少,我想检查用户是否登录或不并相应地发送对象,而不是重写异常。
猜你喜欢
  • 2022-09-29
  • 1970-01-01
  • 2021-09-19
  • 2021-10-07
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2019-04-25
相关资源
最近更新 更多