Laravel 5.3记住我身份验证问题

Posted

技术标签:

【中文标题】Laravel 5.3记住我身份验证问题【英文标题】:Laravel 5.3 Remember me Auth issue 【发布时间】:2017-03-15 04:15:26 【问题描述】:

我已经在我的 laravel 5.3 项目中实现了记住我的登录,但是我在运行时遇到了一些问题,当用户返回页面时,它会自动登录,但是由于会话已经过期,所以没有设置自定义会话变量。

我的会话有效期为 120,并且在关闭时过期是真的。

我的问题是:如何检查用户是否正在通过记住我的令牌进行身份验证以重新签名会话变量?我正在考虑为此创建一个中间件,但我不知道这是否是正确的方法。

我的海关会话变量是:

session()->get('client_id') -> int
session()->get('acl') -> array

谁能指引我正确的方向?

【问题讨论】:

【参考方案1】:

检查以下解决方案,看看它是否有效。

Determine if the User Was Authenticated Via the Remember Cookie

已编辑:

EventServiceProvider添加一个事件监听器

 protected $listen = [
        'Illuminate\Auth\Events\Login' => [
            'App\Listeners\UpdateLoginType@handle',
        ],
    ];

为侦听器生成事件和处理程序

php artisan event:generate

转到UpdateLoginType 并编辑handle 方法以检查登录类型

 public function handle(Login $event)
    
        if (\Auth::viaRemember()) 
            //do something
         else 
            //do something else
        
    

确保在登录时正确传递remember 变量。

类似this one的问题

【讨论】:

我知道函数 viaRemember() 但无论我做什么它总是返回 false,但我的问题是在哪里使用它? @Galfau 回答已编辑。你可以试试看它是否有效。 它工作得很好,作为一个事件,我只是将 session()-set() 逻辑从 AuthController@login 移动到事件,现在我不需要使用 Auth::viaRemember(),因为 Laravel登录成功后将始终抛出该事件。谢谢! 顺便说一句,只有当用户返回页面并使用 remember_me_token cookie 进行身份验证时,方法 viaRemember() 才会返回 true,而不是当用户选中登录页面上的记住我框时,我'已经看到很多人说它总是返回 false 就是因为这个。

以上是关于Laravel 5.3记住我身份验证问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5.3 中使用多个身份验证?

如何使用 Laravel Passport (5.3) 记录身份验证尝试

Laravel 5.3 和 VueJS 2 身份验证

Laravel 5.3 + Passport:总是未经身份验证的错误

护照身份验证在 laravel 5.3 中不起作用

没有身份验证的 Laravel 5.3 RESTFul API