Laravel 通过Sanctum plainTextToken检索用户

Laravel 通过Sanctum plainTextToken检索用户,laravel,laravel-sanctum,Laravel,Laravel Sanctum,如何从Sanctum令牌检索“登录”用户 对于登录,我有以下方法 public function login(Request $request) { if (Auth::attempt($request->toArray())) { /* @var User $user */ $user = $request->user(); $token = $user->createToken('web-token')->p

如何从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
}
公共功能注销(请求$Request)
{

dd($request->user());//由于您将承载/令牌发送到注销url,您可以尝试覆盖
authenticateUsers的
注销功能:

    /**
* 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('/');
}

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

确保您在承载令牌中首先添加了令牌

现在,为了让用户离开sanctum中间件,令牌是可选的

$user = auth('sanctum')->user();
而不是注销

if ($user) {
    $user->currentAccessToken()->delete();
}
注意:此选项仅删除当前令牌

如果您需要所有代币,请使用

foreach ($user->tokens as $token) {
     $token->delete();
}

您是否尝试过
Auth::user()
?@Makdous Yeah返回null。因为没有通过会话登录的用户。很抱歉,我自己澄清一下,我使用的不是默认的注销url,而是自定义的。此外,如果我添加$request->user(),它将返回null,因为没有活动用户。