Passport 和 Auth::logout() 产生意外错误

Passport and Auth::logout() produces an unexpected error

我正在使用 Laravel 6.7 和 Passport 来使用我自己的 API。当我尝试使用 Auth::logout() 注销用户时,出现以下错误:

Illuminate\Auth\RequestGuard::logout does not exist.

我不明白为什么我会有这样的行为。我没有使用任何自定义警卫。根据 Passport 设置,我的 Auth.php 如下:

<?php

return [
    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],
    ],

这是我的 AuthenticationController.php 注销代码所在的位置:

/**
     * --------------------------------------------------
     * Removes the identity of a users login session.
     * --------------------------------------------------
     * @param Request $request
     * @return MessageResource
     * --------------------------------------------------
     */
    public function logout(Request $request): MessageResource
    {
        if (Auth::check()) {
            Auth::user()->token()->revoke();
        }
        return new MessageResource(['message' => 'Logout request is successful.']);
    }

有什么办法可以解决这个问题吗?任何见解将不胜感激。提前致谢。

Auth::logout() 用于 web guard。在这里,您使用的是 API 守卫,因此删除授权令牌它会自动从您的应用程序注销。

public function logout(Request $request)
{
    $request->user()->token()->revoke();
    //$request->user()->token()->delete(); for delete.
    //Auth::user()->token()->revoke(); same way as revoke user token
    return response()->json([
        'message' => 'Successfully logged out'
    ]);
}

试试这个

public function logout(Request $request)
{
    $request->user()->token()->revoke();
    return response()->json([
        'message' => 'Successfully logged out'
    ]);
}