2014-10-16 93 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 
}