Laravel auth中间件不记得我

时间:2017-03-26 23:28:23

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

我似乎无法让remember me工作。

以下是我正在尝试的内容:

  1. 如果我在登录页面上选中“记住我”复选框,然后登录,则我的数据库填入remember_token
  2. 然后我使用Chrome删除laravel_session Cookie以模拟会话过期
  3. 我点击了我网页上的其他链接,我立即退出
  4. 我希望Laravel能够使用这个remember_me_XXX令牌重新登录,但它没有发生。

    我不确定在哪里调试这个。据推测它是由“auth”中间件处理的,但这只是带我走过一条兔子的立面。搜索“remember_web”会显示0结果,所以我甚至不知道该cookie的来源。

    所以我的问题是,

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

1 个答案:

答案 0 :(得分:1)

管理以找到问题。基本上我在\Illuminate\Contracts\Auth\Authenticatable类中错误地实现了User接口。

我做到了这一点:

/**
 * 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或者一个空字符串。