将 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:更新gebruikersherrinerToken = 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)

laravel 4.2 并记住我更新

Laravel在插入新记录时在created_at和updated_at中放置null

如何在 laravel 5.1 中实现“记住我”?

remeber me即记住我功能

填充数据