【问题标题】:Laravel 7/8. Custom hash driver拉拉维尔 7/8。自定义哈希驱动程序
【发布时间】:2021-02-20 04:57:57
【问题描述】:

我有旧数据库,其中密码由 sha3-256 散列。我正在创建一个新站点,我应该使用旧数据库。但是 Auth::attempt() 使用 bcrypt(默认)。如何设置哈希驱动 sha3-256?

【问题讨论】:

  • 如果您不想迁移,您也可以为此创建一个自定义身份验证保护,但我怀疑您不想永远保留遗留哈希,此处的文档:@987654321 @

标签: php laravel laravel-7 laravel-8


【解决方案1】:

它更喜欢使用 Laravel 自带的哈希算法,因为 Laravel 只支持 Bcrypt 和 Argon2。

但是,为了帮助您迁移到新算法,您可以在用户表中创建一个名为 sha3_password 的列,在其中放置旧密码,并在登录时创建一个 if 语句检查 sha3_password 是否不为空,并将输入的密码与您的 sha3-256 进行比较,如果匹配,则使用 bcrypt 更新用户密码字段,并将 sha3_password 设置为空。这样当用户第一次登录时,如果是第一次登录,密码会更新,否则正常登录。

我用这种方法迁移一个项目,效果很好,我的登录功能如下,基本可以使用相同的逻辑:

    public function login(Request $request)
    {
        #Update old password after migration to new platform
        $user= User::where('email',request('email'))
            ->where('password_sha1', sha1(request('password')))
            ->where('password', null)
            ->first();
        if($user)
        {
            $user->password = bcrypt(request('password'));
            $user->password_sha1 = null;
            $user->update();
        }

        if (Auth::attempt(['email' => request('email'), 'password' => request('password'), 'status' => 1])) {
            // Authentication passed...\
            return redirect($this->redirectPath());
        }
    }

【讨论】:

  • 为了安全起见,我会用 Hash::make(request('password')) 代替 bcrypt,但这看起来很有帮助!
猜你喜欢
  • 2021-12-30
  • 2018-02-13
  • 2019-05-26
  • 2020-12-20
  • 1970-01-01
  • 2016-02-19
  • 2018-06-28
  • 2017-03-16
  • 2018-10-14
相关资源
最近更新 更多