没有remember_token的Laravel 5身份验证

时间:2017-04-18 08:30:26

标签: php laravel laravel-5

我正在使用现有数据库,并且我不允许修改表格,因此添加remember_token不是一个选项,但没有它我无法登录。当我尝试登录Laravel时,检查凭据并返回它们是否与记录匹配,但它只刷新页面。我很确定remember_token是我之前遇到此问题的原因,但这次我无法在我的用户表中添加一列。

有没有办法在没有remember_token的情况下使用开箱即用的身份验证?

3 个答案:

答案 0 :(得分:9)

在您的用户模型中添加:

  /**
   * Overrides the method to ignore the remember token.
   */
  public function setAttribute($key, $value)
  {
    $isRememberTokenAttribute = $key == $this->getRememberTokenName();
    if (!$isRememberTokenAttribute)
    {
      parent::setAttribute($key, $value);
    }
  }

致谢:https://laravel.io/forum/05-21-2014-how-to-disable-remember-token

答案 1 :(得分:2)

从Laravel v5.3.27开始,您还可以通过在用户模型中将$rememberTokenName设置为false来禁用“记住我”功能。

class User extends Authenticatable
{
    use Notifiable;


    protected $rememberTokenName = false;

    // ...
}

来源:this commit

答案 2 :(得分:0)

为了真正禁用“记住我”功能并确保未使用牢记的令牌字段,请将以下代码添加到App \ Providers \ AuthServiceProvider的引导方法中。

Auth::provider('eloquent', function($app, array $config)
{
  return new class($app['hash'], $config['model']) extends \Illuminate\Auth\EloquentUserProvider
  {
    public function retrieveByToken($identifier, $token)
    {
      return null;
    }

    public function updateRememberToken(\Illuminate\Contracts\Auth\Authenticatable $user, $token)
    {
      //Do nothing
    }
  };
});

假设默认的Laravel设置,上面的代码将立即起作用。

当然,可以通过在单独的文件中定义自定义用户提供程序而不是使用匿名类来进行改进。