在Laravel中检查密码是否正确

ct2axkht  于 2023-08-08  发布在  其他
关注(0)|答案(9)|浏览(144)

在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("");
                  }
                }
                });
              }
            });

字符串

7jmck4yq

7jmck4yq1#

正如Hiren所提到的,你可以使用默认的注册散列器,因为它被传递给所使用的特定UserProvider。默认值为Illuminate\Hashing\BcryptHasher
你可以通过几种方式使用它:
1.从容器中取出

$user = User::find($id);
$hasher = app('hash');
if ($hasher->check('passwordToCheck', $user->password)) {
    // Success
}

字符串
1.使用Facade

$user = User::find($id);
if (Hash::check('passwordToCheck', $user->password)) {
    // Success
}


1.出于兴趣,使用通用的php函数password_verify也可以工作。然而,这是可行的,因为它使用的默认哈希算法是bcrypt。

if (password_verify('passwordToCheck', $user->password)) {
    // Success
}

gfttwv5a

gfttwv5a2#

可以使用hash:check方法。
使用哈希创建密码:

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

字符串
检查密码:

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

ep6jt1vc

ep6jt1vc3#

当用户尝试访问该页面时,将其重定向到授权页面。
执行 AJAX 调用,然后在php中执行以下操作:

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

字符串
我没有测试过这个,所以它可能不起作用。

vuktfyat

vuktfyat4#

哇,其实很简单:

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

字符串
验证下的字段必须与经过身份验证的用户的密码匹配。
对于未来的人来说:
此规则被重命名为current_password,目的是在Laravel 9中删除它。请改用“当前密码”规则。
所以

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


来源

3wabscal

3wabscal5#

密码是否正确,在laravel PHP中验证密码:就这么做

public function authenticateEmployee(array $data){

 $email = $data['email'];
 $password = $data['password'];
 $user = User::where('email', '=', $email)->first();   //get db User data   

 if(Hash::check($password, $user->password)) {   
      return response()->json(['status'=>'false','message'=>'password is correct']);
    } else {
        return 'false';
    }
}

字符串

点击upvote:)请

ttcibm8c

ttcibm8c7#

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.* 文件

gv8xihay

gv8xihay8#

1.使用 AJAX 调用访问服务器路由。
1.检查auth()->attempt($request->only('email', 'password'))的结果
1.返回带有消息和HTTP状态码的JSON(如果成功则返回200,如果失败则返回400)。
1.将success()方法中的消息显示给div。如果是错误,将error()方法中的错误消息显示给div。

v6ylcynt

v6ylcynt9#

没有一个答案提到Hash类在哪里!我们首先需要使用Hash

use Illuminate\Support\Facades\Hash;

字符串
现在我们可以使用check方法

Hash::check($request->password, $user->password)

相关问题