【问题标题】:Changing laravel remember_token field to something else将 laravel remember_token 字段更改为其他内容
【发布时间】: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 字段?

【问题讨论】:

    标签: php authentication laravel


    【解决方案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';
        }
        

        【讨论】:

          猜你喜欢
          • 2014-06-21
          • 1970-01-01
          • 2013-09-01
          • 1970-01-01
          • 2018-01-07
          • 1970-01-01
          • 1970-01-01
          • 2019-09-03
          • 2018-03-31
          相关资源
          最近更新 更多