Laravel自定义身份验证驱动程序

时间:2016-01-28 17:17:03

标签: php laravel authentication

我试图通过在密码中添加一个盐来制作更安全的Laravels版本,包括身份验证系统。但我不知道如何使用自定义身份验证功能。我做了一个,它看起来像这样:

public function authenticate(Request $request)
{
    $user = User::where('email', $request->email)->first();

    $password = bcrypt($request->password . $user->salt);

    if (Auth::attempt(['email' => $request->email, 'password' => $password])) {
        return redirect()->intented();
    }
}

我尝试从Laravels文档(5.2)

执行此操作

所以要指定它: 我无法在Laravels Auth系统中添加盐,我尝试使用上面的功能,但我不知道如何使用它?

你能帮我吗?

2 个答案:

答案 0 :(得分:1)

简短回答:不要这样做

您正在使用Laravel附带的bcrypt哈希,并且 bcrypt内置了盐以防止彩虹表攻击,因此您不需要自己加盐。下面链接的答案很好地解释了盐如何存储在密码本身中:

  

How can bcrypt have built-in salts?

答案 1 :(得分:0)

更好的方法是覆盖身份验证例程,为项目添加自定义防护。请按照以下说明操作:Adding Custom Guards

您可以扩展Illuminate\Auth\EloquentUserProvider并覆盖validateCredentials方法,如下所示:

/**
 * 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)
{
    $password = bcrypt($credentials['password'] . $user->salt);
    return $this->hasher->check($password, $user->getAuthPassword());
}