2016-01-28 38 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()); 
}