Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Laravel通过用户名和密码获取用户_Php_Laravel_Eloquent - Fatal编程技术网

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文档之后,我找不到更好的选择。