当用户使用oauth2或通过Laravel 5中的网络登录时,如何将Bcrypt更改为Sha1


How to change Bcrypt to Sha1 when user login with using oauth2 or via web in Laravel 5

注册新用户时,我在App/Service/Regitrar.php中更改了方法:

public function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => sha1($data['password']), // default is bcrypt
    ]);
}

它运行良好。当我注册新用户时,我的密码12345678被散列为7c222fb2927d828af22f592134e8932480637c0d

但是,当我登录时,我遇到了问题,并且确定它不能与oauth2.一起使用

请帮帮我,我是Laravel 5的新手。

不推荐-您可以使用类似问题中的解决方案更改哈希。这是给拉拉威尔4号的。但同样的原则也应该适用。不过我不确定。然而,建议使用bcrypt,因为它比SHA1 安全得多

更好的解决方案将当前SHA1哈希迁移到bcrypt。迁移策略可以有以下步骤

  1. 在表中添加一个新列,将其命名为password_new/您喜欢的其他列
  2. 当用户登录时,您拥有真实的密码。检查password_new字段中提交的密码的bcrypt哈希。如果未设置该值,则回退到SHA1检查。如果密码与SHA1散列匹配,则将真实密码散列到bcrypt,并将其保存在password_new列中。然后恢复当前登录流程。如果没有,则显示登录错误消息
  3. 清除所有用户会话
  4. 当所有用户都迁移到brcypt时,删除当前password存储列,并将password_new重命名为password
  5. 从应用程序逻辑中删除对SHA1的检查

注意:步骤3、4、5是可选的,但建议用于防止长期腹胀。