【问题标题】:Laravel 5.5/Angular JWT logoutLaravel 5.5/Angular JWT 注销
【发布时间】:2018-06-16 16:15:55
【问题描述】:

我在使用 JWT package 注销时遇到问题。在 Angular 方面,我正在从本地存储中删除令牌并调用 Laravel API:

logout(): void {
    this.cacheHandler.clearCache();

    return this.http.get(environment.apiUrl + 'logout')
        .toPromise()
        .then(response => {
            const responseData = response.json();
            return responseData.success;
        })
        .catch(error => {
            return error;
        });
}

在 Laravel 方面:

public function logout()
{
    try {
        JWTAuth::invalidate(JWTAuth::getToken());
        return response()->json(['success' => true, 'message' => 'Logout successful'], 200);
    } catch (JWTException $e) {
        return response()->json(['success' => false, 'error' => 'Failed to logout, please try again.'], 500);
    }
}

API 方法受 JWT 身份验证中间件保护,因此在调用 API 时,我正在转发存储在本地存储中的授权承载令牌。方法通过,令牌有效。

之后它进入logout() 方法,我得到注销成功的响应。

问题是我可以触发相同的请求,使用相同的令牌,总是得到相同的消息。如果它被无效,它不能触发第二个请求,因为它在中间件后面。

另外,使用相同的令牌,它应该是无效的,我可以调用其他需要身份验证的 API 方法(没有令牌它们不起作用)

【问题讨论】:

    标签: php angular laravel authorization jwt


    【解决方案1】:

    尝试使用新的 JWTGuard 并像这样调用它:

    public function logout()
    {
        $this->guard()->logout(); // pass true to blacklist forever
    }
    

    该注销函数调用以下代码:

    public function logout($forceForever = false)
    {
        $this->requireToken()->invalidate($forceForever);
    
        $this->user = null;
        $this->jwt->unsetToken();
    }
    

    【讨论】:

    • 不适合我...它说:BadMethodCallException: Method [guard] does not exist on [App\Http\Controllers\Api\AuthController]
    猜你喜欢
    • 2018-03-30
    • 2018-03-22
    • 2018-12-17
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 2019-09-10
    • 1970-01-01
    相关资源
    最近更新 更多