【问题标题】:Always remember users in Laravel永远记住 Laravel 中的用户
【发布时间】:2018-08-27 15:08:37
【问题描述】:

我怎样才能在我的 laravel 登录控制器中始终记住用户?

我尝试制作$remember_me = 1

但这似乎不起作用。

控制器:

public function postSignin(Request $request, AppMailer $mailer) {
    $this->validate($request, [
        'email' => 'required',
        'password' => 'required',
    ]);     

    $username = $request->get('email');
    $password = $request->get('password');

    $field = filter_var($username,FILTER_VALIDATE_EMAIL)? 'email': 'username';      

    Auth::attempt([$field => $username, 'password' => $password], true);


    return redirect()->back()->with('info', 'You are now signed in.');
}       

Home 控制器的开始:

public function getIndex() {
    if (Auth::check()) {

        if (Auth::viaRemember()) {
            dd('test');
        }

编辑:我稍微更改了代码以解释为什么当前答案对我不起作用。

【问题讨论】:

  • 试试这个:if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) { // The user is being remembered... } 并检查记住的用户:if (Auth::viaRemember()) { // }
  • 你应该检查这个问题的答案Laravel Remember Me
  • @FelixMaxime Auth::viaRemember()
  • 您可以将布尔值作为第二个参数传递给尝试方法,这将使用户无限期地通过身份验证,或者直到他们手动注销。当然,您的 users 表必须包含字符串 remember_token 列,该列将用于存储“记住我”令牌。在我的第一条评论中查看我的代码!
  • 太棒了。谢谢你们!

标签: laravel


【解决方案1】:

您可以将布尔值作为第二个参数传递给attempt 方法,这将使用户无限期地通过身份验证,或者直到他们手动注销。当然,您的users 表必须包含字符串remember_token 列,该列将用于存储“记住我”令牌。

if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
     // The user is being remembered...
}

如果您使用的是随附的内置 LoginController Laravel,“记住”用户的正确逻辑已经实现 由控制器使用的特征。

如果您是"remembering" 用户,您可以使用viaRemember 方法来确定用户是否使用“记住我”cookie 进行了身份验证:

if (Auth::viaRemember()) {
    //
}

编辑:

检查您的config/session.php 设置:

'lifetime' => 10080,
'expire_on_close' => true,

只需将您的 expire_on_close 设置为 true

希望对您有所帮助!

【讨论】:

  • 嗨,Hiren。我尝试了您的答案,但是 Auth::viaRemember() 对我永远不起作用。我编辑了我的原始帖子以显示我的整个登录控制器。我的家庭控制器中有一个 if viaremember 条件,尽管在身份验证尝试中将记住值设置为 true,但它并没有发生。
  • 您是否在Auth::attempt 中通过$remember 并保存remember_token
  • 我通过了 true,而不是 $remember。我的整个登录功能现在可以在我的帖子中看到
  • 查看您的情况:if(!Auth::attempt([$field => $username, 'password' => $password], true)) 您正在使用!Auth::attempt 出现错误!
  • 另外,删除所有其他逻辑以重新发送电子邮件,确认电子邮件...只需尝试登录并记住我。它会工作的!
猜你喜欢
  • 2021-07-09
  • 2023-03-06
  • 1970-01-01
  • 2019-11-09
  • 2014-09-02
  • 2018-06-26
  • 2014-06-21
  • 1970-01-01
  • 2014-12-02
相关资源
最近更新 更多