如何在Laravel Auth登录检查中更改为bcrypt而不是md5

时间:2018-10-04 05:14:33

标签: laravel authentication md5 bcrypt password-encryption

我正在使用Hesto / multi-auth

创建新的Auth模块后,我可以注册用户,但是当我尝试使用相同的凭据登录时,登录尝试失败。因此我更新了RegisterController.php->create()方法并将密码加密从默认的bcrypt更改为md5(在存储时)。然后我通过注册创建了另一个用户,然后登录成功。

所以要理解这个问题: 我的laravel版本在登录/检查密码时使用md5加密来比较“密码”。但是我想继续使用bcrypt进行注册和登录(在两种情况下)。我应该如何更改登录方法以使用bcrypt而不是md5

我的Laravel版本:5.5.28

protected function create(array $data)
{
    return Shopowner::create([
        'name' => $data['name'],
        'email' => $data['email'],
        //'password' => bcrypt($data['password']),
        'password' => md5($data['password']),
    ]);
}

2 个答案:

答案 0 :(得分:1)

  

我的laravel版本正在使用md5加密来比较“密码”   在登录/检查密码时。但我想继续使用bcrypt   注册和登录(在两种情况下)。

在您的config/hashing.php文件中,将驱动程序更改为bcrypt

  

我应该如何更改登录方法以使用bcrypt而不是md5?

在您的RegisterController中,使用Hash::make($data['password']);代替bcryptmd5函数,以确保使用驱动程序对密码进行哈希处理

答案 1 :(得分:0)

解决方案:

尽管它似乎不是本地的laravel代码。但是有人更改了其核心,使其可以与md5而非bcrypt

一起使用 在\vendor\laravel\framework\src\Illuminate\Auth\EloquentUserProvider.php [###]中的

被注释掉,并添加了新的if块以与md5一起使用

/**
 * Validate a user against the given credentials.
 *
 * @param  \Illuminate\Contracts\Auth\Authenticatable  $user
 * @param  array  $credentials
 * @return bool
 */
public function validateCredentials(UserContract $user, array $credentials)
{
    $plain = $credentials['password'];

    /* MD5:: This block is custom and added to work with md5 */
    /* ======================== */
    if(md5($plain) == $user->getAuthPassword())
    {
        return true;
    }
    else{
        return false;
    }
    /* ======================== */

   /* Bcrypt:: This line is proper to work with default bcrypt */
   //### return $this->hasher->check($plain, $user->getAuthPassword());
}