2016-01-28 36 views
1

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

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验证系统,我想用上面的函数来做,但我不知道如何使用它?

那么你能帮我吗?

回答

1

简短的回答:不这样做

您使用的是bcrypt散列器自带的Laravel和bcrypt有内置的盐防止彩虹表攻击,让你不需要自己添加盐。下面链接的回答解释了盐如何很好地保存在密码本身:

How can bcrypt have built-in salts?

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()); 
}