Php 使用Laravel通过用户名和密码获取用户
我需要做一些额外的检查对一个用户,我想得到的用户名和密码的用户 首先: 是否有一个内置函数可以通过用户名和密码获取用户,而无需对其进行身份验证 其次:Php 使用Laravel通过用户名和密码获取用户,php,laravel,eloquent,Php,Laravel,Eloquent,我需要做一些额外的检查对一个用户,我想得到的用户名和密码的用户 首先: 是否有一个内置函数可以通过用户名和密码获取用户,而无需对其进行身份验证 其次: 如果上面的回答是否定的,那么我如何正确地对密码进行散列,因为如果我使用散列::make($password)然后与数据库进行比较,它是不同的。。。您通常会使用Hash::check,但我需要通过用户名和密码实际获取用户。首先: 如果要检查要验证的用户数据是否正确,可以使用: if (Auth::validate($credentials)) {
如果上面的回答是否定的,那么我如何正确地对密码进行散列,因为如果我使用
散列::make($password)
然后与数据库进行比较,它是不同的。。。您通常会使用Hash::check,但我需要通过用户名和密码实际获取用户。首先:
如果要检查要验证的用户数据是否正确,可以使用:
if (Auth::validate($credentials))
{
//
}
$user = User::whereName($username)->wherePassword(Hash::make($password))->first();
但如果您想从数据库中获取具有用户和密码的用户,可以使用:
if (Auth::validate($credentials))
{
//
}
$user = User::whereName($username)->wherePassword(Hash::make($password))->first();
秒
要在数据库中存储密码,您应该使用所示的
Hash::make($password)
,它可以正常工作。使用Auth::validate
应该可以解决这个问题。是的,应该使用一个内置函数。我建议你读书。但这里有一个很好的例子,这是不言而喻的:
$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);
我也建议你读一下。我希望这有帮助,祝你好运
编辑:我没有读“未经认证”部分。您应该使用Marcin已经解释过的
Auth::validate($input)
。在Laravel 5.2中
您可以使用Auth::once($credentials)
验证凭据,然后使用Auth::getUser()
以获取用户
$credentials = Request::only('username', 'password');
if(!Auth::once($credentials)) {
// Invalid user credentials; throw Exception.
}
$user = Auth::getUser();
拉威尔5.7
要在不登录的情况下检查用户凭据,我必须执行以下操作:
$user = User::whereEmail($request->email)->first();
$user = password_verify($request->password, optional($user)->getAuthPassword()) ? $user : false;
Laravel auth validation使用是否$credentials是数组?@Jimmyt1988是的,您使用它与
尝试
功能相同,但尝试将记录用户,而此操作不会创建与数据库中相同的密码(至少在Laravel 5.7中)。所以这不起作用。@Jimmyt1988您回复的帖子不对;-)我喜欢这种方法,它不需要让用户模型参与到DB查询的编写中,但是我不太愿意使用这种方法,因为文档表明用户仍然是这个过程的一部分。这让我想知道我是否在向未来的潜在问题敞开心扉。在阅读了Laravel8.x文档之后,我找不到更好的选择。