1

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

Illuminate\Auth\RequestGuard::logout 不存在。

我不明白为什么我会得到这样的行为。我没有使用任何自定义警卫。根据 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.']);
    }

有没有办法解决这个问题?任何见解将不胜感激。提前致谢。

4

2 回答 2

9

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'
    ]);
}
于 2020-02-04T04:14:37.550 回答
1

尝试这个

public function logout(Request $request)
{
    $request->user()->token()->revoke();
    return response()->json([
        'message' => 'Successfully logged out'
    ]);
}
于 2020-02-04T05:58:52.503 回答