Laravel未定义方法撤销

时间:2019-03-27 15:25:52

标签: laravel laravel-passport

我正在测试使用Laravel,Laravel护照和社交名流在vue SPA中登录和注销用户的应用程序。登录和创建用户没有问题,只有当我尝试注销用户时,我才会收到错误:调用未定义方法:revoke

这在Auth \ LoginController中:

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

这在Api.php中:

Route::group(['middleware' => 'auth:api'], function(){
    Route::post('/logout', 'Auth\LoginController@logout');
});

这是在vue SPA中称为axios:

logout() {
    axios.post('/api/logout')
    .then(res=>{
        console.log(res.data);
    });
}

如果撤消有效,我应该得到成功注销的消息。感谢您的任何帮助。

其他:在我的LoginController handleProviderCallback函数中,用于处理我拥有的社交名流登录

    auth()->login($user);
    $tokenResult = $user->createToken('Personal Access Token');
    $token = $tokenResult->token;
    $token->expires_at = Carbon::now()->addWeeks(1);
    $token->save();

    return response()->json([
        'access_token'  =>  $tokenResult->accessToken,
        'token_type'    =>  'Bearer',
        'expires_at'    =>  Carbon::parse($tokenResult->token->expires_at)->toDateTimeString()
    ]);

结果是,当用户单击社交登录名时,它会显示访问令牌。我一直认为cookie的laravel_token是Laravel自动处理的JWT。现在我不太确定。因此,如果使用此附加代码,访问令牌是处理JWT的正确方法,由于响应是社交名流的重定向,而不是Axios请求,因此如何将响应传递到Vue?

在测试JWT之后,我可以再次尝试注销,以查看JWT是否是问题所在。

2 个答案:

答案 0 :(得分:0)

您确定用户具有令牌吗?并且您是否在用户模型中使用HasApiTokens特性?

答案 1 :(得分:0)

我已经使用默认的Auth :: logout()解决了此问题。不需要“个人访问令牌”的代码。在护照的文档中,Laravel在名为laravel_token的cookie中附加了一个JWT,该护照将检查用户是否通过了身份验证。