当前位置: 首页 > 知识库问答 >
问题:

如何使用laravel Passport从API注销用户

熊烨
2023-03-14

我目前正在使用2个项目。1个前端(使用laravel后端与API通信)和另一个laravel项目(API)。

现在,我使用LaravelPassport对用户进行身份验证,并确保每个API调用都是经过授权的调用。

现在,当我想注销我的用户时,我会向我的API发送一个post请求(使用承载令牌),并尝试将他注销API(并清除会话、cookies等)

然后在客户端上,我也刷新我的会话,这样令牌就不再是已知的了。现在,当我回到登录页面时,它会自动登录我的用户。(或者我的用户只是还在登录)。

有人能告诉我如何使用Laravel passport正确注销用户吗?

提前谢谢。

共有3个答案

秦安宁
2023-03-14

这是我用于注销的示例代码

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

您需要从数据库表中删除令牌oauth\u access\u tokens您可以通过创建一个新模型,如OauthAccessToken

>

  • 运行命令php artisan make:model OauthAccessToken创建模型。

    然后在User模型和新创建的OauAccessToken模型之间创建一个关系,在User.php中添加:

    public function AauthAcessToken(){
        return $this->hasMany('\App\OauthAccessToken');
    }
    

    在UserController中。php,创建一个用于注销的新函数

    public function logoutApi()
    { 
        if (Auth::check()) {
           Auth::user()->AauthAcessToken()->delete();
        }
    }
    

    在api中。php路由器,创建新路由:

     Route::post('logout','UserController@logoutApi');
    

  • 方博
    2023-03-14

    确保在Usermodel中导入了此

    use Laravel\Passport\HasApiTokens;
    

    您在User模型类中使用traitHasApiTokens,使用

    use HasApiTokens
    

    用户类内部。现在,您创建注销路由,并在控制器中执行此操作

    $user = Auth::user()->token();
    $user->revoke();
    return 'logged out'; // modify as per your need
    

    这将使用户从其请求注销的当前设备注销。如果你想从他登录的所有设备上注销。那么就这样做吧

    $tokens =  $user->tokens->pluck('id');
    Token::whereIn('id', $tokens)
        ->update(['revoked', true]);
    
    RefreshToken::whereIn('access_token_id', $tokens)->update(['revoked' => true]);
    

    确保在顶部导入这两个

    use Laravel\Passport\RefreshToken;
    use Laravel\Passport\Token;
    

    这将撤销颁发给该用户的所有访问和刷新令牌。这将让用户从任何地方注销。当用户使用“重置密码”或“忘记密码”选项更改密码,并且您必须从任何地方注销用户时,这确实会有所帮助。

     类似资料:
    • 我尝试这个为fb注销,给我错误。 NoSuchElement异常:消息:无法定位元素:{"方法":"xpath","selector":"/html/body/div[25]/div/div/div/div[1]/div/div/ul/li[3]/a/span/span"}

    • 我使用这个示例https://dzone.com/articles/spring-boot-security-json-web-tokenjwt-hello-world创建带有json web令牌(JWT)的spring boot rest api。但是我没有找到任何使用io.jsonWebToken maven依赖项强制注销的api。 我正在pom中使用此依赖项: 任何一个可以告诉我这个依赖,提

    • 问题内容: 答案可能很简单:如何在Spring Security中手动注销当前登录的用户: ? 问题答案: 在Servlet 3.0容器中,Spring注销功能与Servlet集成在一起,你只需在上调用。仍然需要编写有效的响应内容。 根据文档(Spring 3.2): HttpServletRequest.logout()方法可用于注销当前用户。 通常,这意味着将清除SecurityContext

    • 我知道一个解决这个问题的方法: 保存用户的电子邮件和密码到内存和创建后用户重新登录回到原来的用户,但它需要保存密码,我不喜欢它。

    • 问题内容: 当用户从垂直设备注销时,我要从他迄今为止登录的所有设备中注销。我在Laravel中如何做。 我已经使用Redis通过安装“ predis / predis”:“〜1.0”将userId保留在Session中。 这是我用于登录和注销的控制器: 它已成功登录并注销,但不会终止其他设备上的所有会话。 我该如何解决这个问题? 问题答案: 因此,redis键名中的错字是问题,因为写数据使用的 是

    • 我有一个实现了Spring Security性的Spring Boot应用程序。用户日志和注销成功工作,我正在使用jdbc来会话存储。现在,我只想实现一个新的restendpoint,它接受特定用户的用户名作为参数,并注销该用户。目前,我使用follwing类作为注销植入。 可以从表中手动删除表项,并注销用户。但是我想通过遵循Spring Security的适当流程来注销。 谢谢