我需要对用户进行一些额外的检查,我想通过用户名和密码来获取用户。
首先
是否有内置函数可以通过用户名和密码获取用户而无需对其进行身份验证?
其次:
如果上面没有,那么我如何正确地对密码进行哈希,因为如果我使用Hash::make( $password )
然后与数据库进行比较,那就不一样......你通常会使用Hash :: check但我需要通过用户名和密码来实际获取用户。
答案 0 :(得分:2)
在Laravel 5.2中
您可以使用Auth::once($credentials)
来验证凭据,然后使用Auth::getUser();
来获取用户。
$credentials = Request::only('username', 'password');
if(Auth::once($credentials)) {
$user = Auth::getUser();
} else {
// Invalid user credentials
}
答案 1 :(得分:1)
<强>首先强>
如果要检查要验证的用户数据是否正确,可以使用:
if (Auth::validate($credentials))
{
//
}
但是如果你想通过用户和密码从数据库中获取用户,你可以使用:
$user = User::whereName($username)->wherePassword(Hash::make($password))->first();
<强>第二强>
要在数据库中存储密码,您应该在显示时使用Hash::make($password)
,它可以正常运行。使用Auth::validate
可以解决问题。
答案 2 :(得分: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。我希望这有帮助,祝你好运。
编辑:我没有读过“没有验证他们”的部分。你应该使用Auth::validate($input)
,因为Marcin已经解释过了。
答案 3 :(得分:0)
Laravel 5.7
要在不登录的情况下检查用户凭据,我必须这样做:
$user = User::whereEmail($request->email)->first();
$user = password_verify($request->password, optional($user)->getAuthPassword()) ? $user : false;
Laravel身份验证使用https://www.php.net/manual/en/function.password-verify.php