【问题标题】:use bcrypt() in jquery or javascript在 jquery 或 javascript 中使用 bcrypt()
【发布时间】:2017-11-21 05:05:54
【问题描述】:

这段代码是用validation.js编写的,用于动态验证所有laravel更改密码表单

$.validator.addMethod("matchp", function(value, element)
{

 var dbpass = $("#old").val();  
// #old value is fetch from database in type=hidden in frontend and its in bcrypt format.



var txtpass = bcrypt($("#oldpass").val());  
// #oldpass value is fetch from frontend its user value and it sholud convert in bcrypt format.  

// So that we can compare it to verify the old password while changing the old password.


    // Check for equality with the password inputs
    if (dbpass != txtpass ) {
        return false;
    } else {
        return true;
    }

}, "Your Passwords Must Match");

【问题讨论】:

  • 有什么问题?
  • 它不起作用,因为我在 jquery 验证文件中使用 bcrypt()

标签: javascript jquery laravel validation bcrypt


【解决方案1】:

这行不通,因为 Laravel 密码也是加盐的。

我会做的是

  • 使用 ajax 将未加密的 #oldpass 传递到您的后端
  • 在您的后端,使用 Hash::check 将 #oldpass 与当前密码进行比较

    if(Hash::check($request->oldpass, Auth::user()->password)){ return true;
    }else{ return false; }

不要忘记将外观添加到 Laravel 控制器的顶部

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

【讨论】:

  • 但是我想要动态验证,所以在输入用户时知道它的密码错误
  • 使用 on 'blur' 或 'keyup' 事件来触发 ajax 调用。 $("#oldpass").on('blur',function(){ //ajax call here })
【解决方案2】:

Bcrypt 函数意味着一种算法,它每次为具有不同盐的唯一字符串提供不同的哈希值。因此无法使用任何 JS 验证插件对其进行验证。当然,您可以在不使用任何散列技术的情况下检查不同的输入字段值,就像验证密码和确认密码字段时一样。

如果您确实需要在客户端使用 bcrypt,请使用静态盐。

更新,如果您使用的是@Nevins-b JavaScript Bcrypt 插件,那么您可以使用相同的盐来验证不同的字段。

希望这对您的问题感到满意。

【讨论】:

猜你喜欢
  • 2017-06-03
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-09
  • 2012-12-25
  • 2011-04-23
  • 1970-01-01
相关资源
最近更新 更多