将remember_token存储到与用户不同的表中?

时间:2015-04-22 16:56:34

标签: laravel laravel-5

是否可以设置另一个表&列存储我的记忆代币?我知道框架会尝试在我的“用户”模型中自动查找remember_token列,但我想将其与用户分开存储。有没有办法配置我的默认令牌表?谢谢

P.S - 我正在使用laravel 5

2 个答案:

答案 0 :(得分:2)

首先,您需要创建单独的模型来存储记忆标记,并在您的用户模型上定义关系,如此

public function rememberToken() {
    return $this->hasOne('RememberToken');
}

然后,您需要覆盖最初在Authenticatable特征中定义的用户模型上的方法。覆盖getRememberToken()setRememberToken()方法。您还需要覆盖getRememberTokenName(),因为它在where中的EloquentUserProvider::retrieveByToken()子句中使用,请参阅EloquentUserProvider第60行。为了使其正常工作,您可能需要向用户添加全局范围模型在每个查询上加入remember_tokens表,并从'remember_tokens.token'方法返回getRememberTokenName()

三思而后行似乎比它的价值更麻烦。你为什么要分开存储你的代币?

答案 1 :(得分:1)

我相信Laravel的工作方式是在users表中使用单独的列来存储单个Remember_me令牌。根据我的理解,登出会重置此令牌,而不用将令牌存储在cookie中(如果我错了,请更正我)。 https://github.com/laravel/ideas/issues/971 如果您在个人计算机上选中“ remember_me”登录, 然后再次在手机上 也许再用其他任何设备, 那么最终使用或不使用Remember_me令牌在任何设备上注销的行为都会在数据库中重置该令牌。

如果Laravel有一个单独的表,能够记住每个设备,则可能会解决问题。