在Laravel中检查密码是否正确

时间:2016-07-22 05:04:22

标签: laravel

在laravel中我想检查用户是否输入当前密码,而不是检查该用户数据中存储在数据库中的密码。如果正确而不是继续,否则给出消息密码不正确。

我是laravel的新手,所以没有得到确切的想法。

提前致谢。

$('#pwd').blur(function(){
            var oldpwd=$('#pwd').val();
            var uid = $('#id').val();
            console.log(uid);
            if(oldpwd != "")
            {
              $.ajax({
                  url : "{{ url/profile/checkOldPwd}}",
                  data : { oldpwd:oldpwd , uid:uid },
                  type : "POST",
                  success : function(data) {
                    if(data == 0){
                      $("#msg-old").show();
                      $("#msg-old").html("Password is Incorrect!");
                      $("#pwd").val("");
                      $("#pwd").focus();
                  }
                  else
                  {
                    $("#msg-old").hide();
                    $("#msg-old").html("");
                  }
                }
                });
              }
            });

8 个答案:

答案 0 :(得分:25)

正如Hiren所提到的,你可以使用默认的注册哈希,因为它被传递给使用的特定UserProvider。默认值为Illuminate\Hashing\BcryptHasher

您可以通过以下两种方式使用它:

  1. 从容器中取出
  2. $user = User::find($id);
    $hasher = app('hash');
    if ($hasher->check('passwordToCheck', $user->password)) {
        // Success
    }
    
    1. 使用Facade
    2. $user = User::find($id);
      if (Hash::check('passwordToCheck', $user->password)) {
          // Success
      }
      
      1. 使用通用php函数password_verify的兴趣也有效。但是这样可行,因为它使用的默认哈希算法是bcrypt。
      2. if (password_verify('passwordToCheck', $user->password)) {
            // Success
        }
        

答案 1 :(得分:3)

当用户尝试访问该页面时,将其重定向到一个身份验证页面。

然后执行ajax调用,在php中执行以下操作:

public function check(Request $request)
{
    if(Hash::check($request->password, $user->password)) {
        // They match
    } else {
        // They don't match
    }
}

我没有对此进行测试,因此可能无效。

答案 2 :(得分:3)

您可以使用哈希:检查方法。

使用hash创建密码:

$password = Hash::make('secret');

检查密码:

if (Hash::check('secret', $hashedPassword))
{
    // The passwords match...
}

答案 3 :(得分:1)

laravel 6.* 中的认证逻辑在“vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php”中。 在此文件中,您将找到 sendFailedLoginResponse() 方法,我们将在 LoginController.php 上覆盖该方法

protected function sendFailedLoginResponse(Request $request)
    {

        if (!User::where('email', $request->email)->first()) {
            throw ValidationException::withMessages([trans('auth.email')]);
        }
        
        if (!User::where('email', $request->email)->where('password', bcrypt($request->password))->first()) {
            throw ValidationException::withMessages([trans('auth.password')]);
        }
    }

此自定义方法验证用户是否存在于数据库中,查找您在模型上设置的唯一值。如果用户存在于数据库中,则会检查密码。然后,您可以使用

调用错误
@if($errors->any())
<div class="alert alert-danger" >
  <ul>
    @foreach($errors->all() as $error)
      <li>{{ $error }}</li>
    @endforeach
  </ul>

</div>

@endif

在您的刀片文件上。请记住,您从“resources\lang\en\auth.php”中调用这些 auth.* 文件

答案 4 :(得分:0)

  1. 使用您的AJAX呼叫点击服务器路由。
  2. 检查auth()->attempt($request->only('email', 'password'))
  3. 的结果
  4. 使用消息和HTTP状态代码返回JSON(如果成功则返回200,如果失败则返回400)。
  5. success()方法中的消息显示给div。如果是错误,请将error()方法中的错误消息显示为div。

答案 5 :(得分:0)

做到这一点

array([[107, 'Berg Live', 'Berg',
        datetime.date(2017, 1, 8), 'Concert', 7]], dtype=object)

答案 6 :(得分:0)

if (Hash::check($request->password, Auth::user()->password)) { //Sucess }

答案 7 :(得分:0)

哇,其实超级简单:

$request->validate([
     'password' => 'required|string|password',
]);
<块引用>

验证字段必须与已验证用户的密码匹配。

但是对于未来的人们:

<块引用>

为了在 Laravel 9 中将其删除,此规则已重命名为 current_password。请改用当前密码规则。

原来如此

$request->validate([
     'password' => 'required|string|current_password',
]);

Source