对于我的项目,我使用Auth登录,一切正常,直到我尝试注销:
Auth::logout();
我使用自定义字段名herrinerToken而不是默认的remember_token。在我的model / 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字段?
答案 0 :(得分:10)
将herrinerToken
列而不是remember_token
列添加到用户(或等效的)数据库表中。
您应该使用以下代码段:
public function getRememberToken()
{
return $this->herrinerToken;
}
public function setRememberToken($value)
{
$this->herrinerToken = $value;
}
public function getRememberTokenName()
{
return 'herrinerToken';
}
答案 1 :(得分:2)
DatabaseUserProvider
中 - 因此即使您在模型中更改它 - 如果您使用数据库验证驱动程序,Laravel仍会查找'remember_token'。< / p>
您需要切换到Eloquent auth驱动程序。看起来好像你正在使用Eloquent作为你的用户模型 - 所以现在应该有问题切换。
在app/config/auth.php
文件中更改以下使用Eloquent的设置 - 目前应解决此问题:
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',
答案 2 :(得分:0)
不确定自从最初回答以来Laravel是否已更改,但是有一个简单的答案:
在您的 User.php 文件中添加:
protected $rememberTokenName = 'myTokenField';
据我所知,此值由getRememberTokenName
方法使用,因此会传播到其余代码。
如Laurence所示,数据库身份验证驱动程序可能存在问题,似乎使用了硬编码值。
答案 3 :(得分:0)
向用户(或等效)数据库表中添加remember_key
列而不是remember_token
列。
您应该使用以下代码段:
public function getRememberToken()
{
return $this->remember_key;
}
public function setRememberToken($value)
{
$this->remember_key = $value;
}
public function getRememberTokenName()
{
return 'remember_key';
}