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 /login 的情况下使用 laravel sanctum
Laravel 7 Vue 2 Sanctum 登录错误 419; CSRF 令牌不匹配
如何在 Sanctum Laravel 中通过 Token 获取用户