将laravel remember_token字段更改为其他内容

时间:2014-05-16 20:52:49

标签: php authentication laravel

对于我的项目,我使用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字段?

4 个答案:

答案 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)

我调查了这个。事实证明,字段名称'remember_token'实际上是硬编码到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';
}