【问题标题】:Laravel auth middleware not remembering meLaravel auth 中间件不记得我了
【发布时间】:2026-02-17 09:25:02
【问题描述】:

我似乎无法让remember me 工作。

这是我正在尝试的:

  1. 如果我选中登录页面上的“记住我”复选框然后登录,我的数据库中的 remember_token 列就会被填满
  2. 然后我使用 Chrome 删除 laravel_session cookie 以模拟会话到期
  3. 我点击网页上的另一个链接,然后立即退出

我希望 Laravel 使用这个 remember_me_XXX 令牌让我重新登录,但它没有发生。

我不知道去哪里调试。大概它是由“auth”中间件处理的,但这只是带我穿过门面的兔子痕迹。搜索“remember_web”会出现 0 个结果,所以我什至不知道那个 cookie 是从哪里来的。

所以我的问题是,

  1. 我必须做什么/实施才能让 Laravel 使用记住我令牌让我重新登录,
  2. 或者,在 Laravel 源代码中,这个 cookie 是在哪里读取和使用的,以便我可以调试它?

【问题讨论】:

  • 我在\Illuminate\Auth\SessionGuard::user 中发现了一些东西——现在正在调查
  • \Illuminate\Auth\SessionGuard::validRecaller 返回 false,因为记住我的令牌中不包含 | - 为什么不呢?

标签: php laravel cookies laravel-5.2 remember-me


【解决方案1】:

设法找到问题。本质上,我在User 类中错误地实现了\Illuminate\Contracts\Auth\Authenticatable 接口。

我已经这样做了:

/**
 * Get the password for the user.
 *
 * @return string
 */
public function getAuthPassword()
{
    return $this->password;
}

/**
 * Get the e-mail address where password reminders are sent.
 *
 * @return string
 */
public function getReminderEmail()
{
    return $this->email;
}

/**
 * Get the token value for the "remember me" session.
 *
 * @return string
 */
public function getRememberToken() {
    return $this->remember_token;
}

/**
 * Set the token value for the "remember me" session.
 *
 * @param  string $value
 * @return void
 */
public function setRememberToken($value) {
    $this->remember_token = $value;
}

什么时候我应该这样做:

/**
 * Get the password for the user.
 *
 * @return string
 */
public function getAuthPassword() {
    return $this->getAttribute('password');
}

/**
 * Get the e-mail address where password reminders are sent.
 *
 * @return string
 */
public function getReminderEmail() {
    return $this->getAttribute('email');
}

/**
 * Get the token value for the "remember me" session.
 *
 * @return string
 */
public function getRememberToken() {
    return $this->getAttribute('remember_token');
}

我不确定我从哪里复制了原始代码,但基本上所有必要的数据都存储在模型属性中,而不是类实例本身中,因此所有这些函数都返回 null 或空字符串。

【讨论】:

  • 感谢您分享此信息!我正在调试不记得几个小时,多亏了你,我专注于我的 getRememberToken() 并发现了一个错误。
最近更新 更多