2014-10-16 127 views
0

我需要對用戶進行一些額外的檢查,我想通過用戶名和密碼獲取用戶。通過用戶名和密碼與Laravel獲取用戶

首先:

有一個內置的函數,通過獲取用戶名和密碼的用戶無需驗證呢?

其次:

如果以上是否定的,那麼我怎麼正確地散列密碼,因爲如果我使用Hash::make($password),並且然後與數據庫,它是不一樣的...你通常會使用Hash :: check,但我需要通過用戶名和密碼實際獲取用戶。

回答

1

第一:

如果你想檢查用戶數據,以驗證是正確的,你可以使用:

if (Auth::validate($credentials)) 
{ 
    // 
} 

但是,如果你想從數據庫用戶提供用戶名和密碼,你可以使用:

$user = User::whereName($username)->wherePassword(Hash::make($password))->first(); 

要在數據庫中存儲密碼,您應該使用Hash::make($password),因爲您顯示它並且沒有任何問題。使用Auth::validate應該可以解決問題。

+0

是$ credentials數組嗎? – Jimmyt1988 2014-10-16 17:00:18

+0

@ Jimmyt1988是的,你使用它與'試圖'功能相同,但嘗試將登錄用戶,這將不會 – 2014-10-16 17:03:33

+0

@ Jimmyt1988我編輯了我的答案 – 2014-10-16 17:52:29

0

是的,您應該使用內置函數。我建議你閱讀the docs。但這裏有一個很好的例子,這是相當不言自明:

$input = array(
    'username' => Input::get('username'), 
    'password' => Input::get('password'), 
); 

$remember = (boolean)Input::get('remember'); //'Remember me' checkbox 

if (Auth::attempt($input, $remember)) { 
    return Redirect::intended('dashboard')->with("success", "You're logged in!"); //Redirect the user to the page intended to go to, with the dashboard page as default 
} 

註冊用戶看起來是這樣的:

$input = array(
    'username' => Input::get('username'), 
    'email'  => Input::get('email'), 
    'password' => Hash::make(Input::get('password')) //Encrypt password 
); 

$user = User::create($input); 

我也建議你閱讀有關input validation。我希望這會有所幫助,祝你好運。

編輯:我沒有閱讀「沒有驗證他們」部分。正如Marcin已經解釋的那樣,您應該使用Auth::validate($input)

+0

$ user = Auth :: validate($ credentials);不返回用戶... – Jimmyt1988 2014-10-16 17:02:27

+0

@ Jimmyt1988你對錯誤的帖子作出了迴應;-) – JasonK 2014-10-16 17:03:47

1

在Laravel 5.2

您可以使用Auth::once($credentials)驗證憑據,然後Auth::getUser();來獲取用戶。

$credentials = Request::only('username', 'password'); 
if(Auth::once($credentials)) { 
    $user = Auth::getUser(); 
} else { 
    // Invalid user credentials 
}