3

如何从 Sanctum 令牌中检索“登录”用户。

对于登录,我有以下方法

public function login(Request $request)
{
    if (Auth::attempt($request->toArray())) {

        /* @var User $user */
        $user = $request->user();

        $token = $user->createToken('web-token')->plainTextToken;

        return response()->json([
            'user' => $user,
            'token' => $token,
        ], Response::HTTP_OK);
    }
}

现在注销我使用自定义方法。

public function logout(Request $request)
{
    dd($request->user()); // <- Always returns null
}

我想撤销令牌,但我不知道如何检索当前登录的用户。显然,为了注销,我发送了带有 Bearer 和 plainTextToken 作为值的 Authorization 标头。

4

3 回答 3

7

确保您首先在不记名令牌中添加令牌

并让用户退出 sanctum 中间件,现在令牌是可选的

$user = auth('sanctum')->user();

比登出

if ($user) {
    $user->currentAccessToken()->delete();
}

注意:这仅删除当前令牌

如果你需要所有令牌使用

foreach ($user->tokens as $token) {
     $token->delete();
}
于 2021-01-28T12:14:57.547 回答
0

只需在中间件('auth:sanctum') 分组路由中添加路由,然后从目标函数内部,您可以获得像这样的用户 auth()->user() 或者如果您只想注销用户,您可以像这样撤销令牌这个 $request->user()->currentAccessToken()->delete();

于 2020-10-01T05:51:07.593 回答
-1

由于您将承载/令牌发送到注销 url,您可以尝试覆盖以下logout功能AuthenticatesUsers

    /**
* Log the user out of the application.
*
* @param  \Illuminate\Http\Request  $request
* @return \Illuminate\Http\Response
*/
public function logout(Request $request)
{
    $this->guard()->logout();

    $request->user()->tokens()->delete();

    return redirect('/');
}
于 2020-07-01T21:56:22.990 回答