我试图通过在密码中添加一个盐来制作更安全的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系统中添加盐,我尝试使用上面的功能,但我不知道如何使用它?
你能帮我吗?答案 0 :(得分:1)
简短回答:不要这样做
您正在使用Laravel附带的bcrypt
哈希,并且 bcrypt内置了盐以防止彩虹表攻击,因此您不需要自己加盐。下面链接的答案很好地解释了盐如何存储在密码本身中:
答案 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());
}