在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("");
}
}
});
}
});
答案 0 :(得分:25)
正如Hiren所提到的,你可以使用默认的注册哈希,因为它被传递给使用的特定UserProvider。默认值为Illuminate\Hashing\BcryptHasher
。
您可以通过以下两种方式使用它:
$user = User::find($id);
$hasher = app('hash');
if ($hasher->check('passwordToCheck', $user->password)) {
// Success
}
$user = User::find($id);
if (Hash::check('passwordToCheck', $user->password)) {
// Success
}
password_verify
的兴趣也有效。但是这样可行,因为它使用的默认哈希算法是bcrypt。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)
auth()->attempt($request->only('email', 'password'))
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',
]);