如何使用哈希技术登录laravel

时间:2018-03-08 17:33:11

标签: php laravel laravel-5.6

我存储了电子邮件&密码是这样的:

  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.";
      }
  }

但无法通过正确的电子邮件和密码登录。我认为登录哈希密码技术正在为密码生成新的字符,因此它不匹配。任何人都可以帮我在这里如何登录。提前谢谢。

2 个答案:

答案 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';
}