我存储了电子邮件&密码是这样的:
public function addNewUser(Request $request)/****Add new User****/
{
$user_email = $request->input('email');
$user_hashed_pass = $request->input('password');
$user_pass = Hash::make($user_hashed_pass);
$addAdmin = new SaveNewUser(['useremail'=> $user_email, 'userpassword'=> $user_pass]);
$addAdmin->save();
echo "User added.";
}
尝试像这样登录:
public function userLogin(Request $request)/****Login User****/
{
$user_email_log = $request->input('email');
$user_hashed_pass = $request->input('password');
$user_pass_log = Hash::make($user_hashed_pass);
$user = DB::table('userinfo')->where(['useremail'=>$user_email_log, 'userpassword'=>$user_pass_log ])->get();
if(count($user)>0)
{
echo "Welcome User";
}
else
{
echo "Wrong email/password.";
}
}
但无法通过正确的电子邮件和密码登录。我认为登录哈希密码技术正在为密码生成新的字符,因此它不匹配。任何人都可以帮我在这里如何登录。提前谢谢。
答案 0 :(得分:1)
你的权利,每次Hash:make()运行它会返回一个不同的结果,因为添加了一些随机性。使用Hash :: check()函数根据存储在数据库中的哈希检查纯文本密码。例如,在仅使用电子邮件恢复用户模型后,请使用以下命令测试密码。
if(Hash::check($request->input('password'), $user->password))
{
echo "Welcome User";
}
答案 1 :(得分:0)
从https://laravel.com/docs/5.6/hashing,您可以看到他们在“根据哈希验证密码”中有Hash::check()
if (Hash::check('plain-text', $hashedPassword)) {
// The passwords match...
}
或者在你的情况下,它看起来像这样
$user = DB::table('userinfo')->where('useremail', $request->input('email'))->first();
if ($user === null) {
return 'Wrong email';
}
if (Hash::check($request->input('password'), $user->password)) {
return 'Welcome User';
} else {
return 'Wrong password';
}