在 jquery 或 javascript 中使用 bcrypt()

Posted

技术标签:

【中文标题】在 jquery 或 javascript 中使用 bcrypt()【英文标题】:use bcrypt() in jquery or javascript 【发布时间】: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() 【参考方案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 插件,那么您可以使用相同的盐来验证不同的字段。

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

【讨论】:

这意味着我可以在 php 中使用 bcrypt() 但我不能在 jquery 或 .js 文件中使用它。 @Rohan 使用github.com/nevins-b/javascript-bcrypt 并使用相同的盐验证多个字段。 我在 StackExchage security.stackexchange.com/questions/93395/… 上发现了类似的问题 您也可以使用验证 remote: 从服务器端检查 bcrypt。

以上是关于在 jquery 或 javascript 中使用 bcrypt()的主要内容,如果未能解决你的问题,请参考以下文章

在 jquery 或 javascript 中使用 bcrypt()

如何在 jQuery / javascript 中使用 each() 进行迭代或循环

使用 jQuery 或 Javascript 在页面上选择数字

使用 JavaScript 或 jQuery 检测哪个表单输入具有焦点

我想在 javascript 或 Jquery 中使用 XPath 3.0 语言支持

使用 jquery 或 javascript 在 GridView 的 TemplateField 中查找控件