将 laravel remember_token 字段更改为其他内容
Posted
技术标签:
【中文标题】将 laravel remember_token 字段更改为其他内容【英文标题】:Changing laravel remember_token field to something else 【发布时间】:2014-07-05 10:38:00 【问题描述】:对于我的项目,我使用 Auth 登录,一切正常,直到我尝试注销:
Auth::logout();
我使用自定义字段名 herrinerToken 而不是默认的 remember_token。在我的模型/user.php 中,我将函数 getRememberToken() 编辑为:
public function getRememberTokenName()
return 'herrinerToken';
当我现在尝试注销时,我收到消息:
SQLSTATE [42S22]:柱未找到:1054未知列 'remember_token' 在 '字段列表'(SQL:更新gebruikers
组herrinerToken
= a3eYy1IIbX1FfPhPgmYNTNLwkE7A43vgqwpSU2B5b3EFNHl0ayYF1vUSGCbc,remember_token
= a3eYy1IIbX1FfPhPgmYNTNLwkE7A43vgqwpSU2B5b3EFNHl0ayYF1vUSGCbc其中id
= 6)
所以看起来它尝试更新 remember_token 和 herrinerToken 但我只想更新 herinner_token 字段。我需要调整什么来只更新 herrinerToken 字段而不是 remember_token 字段?
【问题讨论】:
【参考方案1】:将herrinerToken
列而不是remember_token
列添加到您的用户(或等效)数据库表中。
您应该与以下 sn-p 一起使用:
public function getRememberToken()
return $this->herrinerToken;
public function setRememberToken($value)
$this->herrinerToken = $value;
public function getRememberTokenName()
return 'herrinerToken';
【讨论】:
问题是他的问题中的 SQL 错误在查询中清楚地显示了“remember_token” - 所以 Laravel 忽略了他将“herrinerToken”设置为名称。【参考方案2】:我对此进行了调查。事实证明,字段名称“remember_token”实际上是硬编码到 DatabaseUserProvider
中的——所以即使你在模型中更改它——如果你使用数据库身份验证驱动程序,Laravel 仍然会寻找“remember_token”。
您需要切换到 Eloquent 身份验证驱动程序。似乎您无论如何都在为您的用户模型使用 Eloquent - 所以现在应该有问题切换。
在您正在使用 Eloquent 的 app/config/auth.php
文件中更改以下设置 - 现在应该可以解决此问题:
return array(
/*
|--------------------------------------------------------------------------
| Default Authentication Driver
|--------------------------------------------------------------------------
|
| This option controls the authentication driver that will be utilized.
| This driver manages the retrieval and authentication of the users
| attempting to get access to protected areas of your application.
|
| Supported: "database", "eloquent"
|
*/
'driver' => 'eloquent',
【讨论】:
【参考方案3】:不确定自最初回答以来 Laravel 是否发生了变化,但有一个简单的答案:
在您的 User.php 文件中添加:
protected $rememberTokenName = 'myTokenField';
据我所知,getRememberTokenName
方法使用了此值,因此会传播到代码的其余部分。
正如Laurence 指出的那样,似乎使用硬编码值的数据库身份验证驱动程序可能存在问题。
【讨论】:
【参考方案4】:将remember_key
列而不是remember_token
列添加到您的用户(或等效)数据库表中。
您应该与以下 sn-p 一起使用:
public function getRememberToken()
return $this->remember_key;
public function setRememberToken($value)
$this->remember_key = $value;
public function getRememberTokenName()
return 'remember_key';
【讨论】:
以上是关于将 laravel remember_token 字段更改为其他内容的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 7:禁用登录和自动登录(remember_token)