亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用bcrypt和對象分配進行密碼哈希

使用bcrypt和對象分配進行密碼哈希

九州編程 2021-03-28 15:08:56
我需要將明確的密碼交換為散列的密碼。我正在使用bcryptjs來幫助我。我曾嘗試分配明確使用哈希密碼的密碼,但是我在bash上遇到錯誤。我正在嘗試的代碼:const bcrypt = require('bcryptjs');const students = require('./students1.json');const fs = require('fs');let secureUsers = [];for (let student of students) {    let salt = bcrypt.genSaltSync(10);    let passHash = bcrypt.hashSync(student.password, salt);    Object.assign(student.password, passHash);    secureUsers.push(secStudent);}fs.writeFileSync('secStudents.json', JSON.stringify(secureUsers, null, 2));console.log('wrote file!');我得到的錯誤:$ node bcryptExample.jsC:\Users\mziad\assignment-mziadeh1\servers\bcryptExample.js:13    Object.assign(student.password, passHash);           ^TypeError: Cannot assign to read only property '0' of object '[object String]'    at Function.assign (<anonymous>)    at Object.<anonymous> (C:\Users\mziad\assignment-mziadeh1\servers\bcryptExample.js:13:12)    at Module._compile (internal/modules/cjs/loader.js:701:30)    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)    at Module.load (internal/modules/cjs/loader.js:600:32)    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)    at Function.Module._load (internal/modules/cjs/loader.js:531:3)    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)    at startup (internal/bootstrap/node.js:283:19)    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)我想要散列的示例:{    "netid": "ky4531",    "firstName": "Frankie",    "lastName": "Griffith",    "email": "[email protected]",    "password": "t'|x/)$g"  },  {    "netid": "tw0199",    "firstName": "Julietta",    "lastName": "Vargas",    "email": "[email protected]",    "password": "Rc*pKe$w"  }我需要將密碼與哈希碼交換,因此為什么要嘗試分配密碼。但是我遇到了一個我不理解的錯誤,我現在無法真正發現我的代碼有任何問題。
查看完整描述

1 回答

?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

似乎您誤解了Object.assign函數的工作方式。Object.assign函數的作用是遍歷源參數的每個屬性(第一個參數之后的參數),并在第一個參數中覆蓋它。


您的示例中的問題是您嘗試使用String作為其參數調用Object.assign Object.assign('abc', 'def')。JavaScript中的字符串文字實際上是字符數組,而對象中的數組是以索引為屬性的。默認情況下,不能重新分配字符串屬性(索引)(可寫:false)。


這是一個示范:


var a = 'abc';

console.log(a[0]) // outputs 'a'


var descriptor = Object.getOwnPropertyDescriptor(a, 0)

console.log(descriptor)

//outputs

/*

{ value: 'a',

  writable: false,

  enumerable: true,

  configurable: false }

*/


Object.assign('abc', 'def');// throws Cannot assign to read only property '0' of object '[object String]'

如您所見,writable設置為false,這意味著您無法重新分配字符串中的每個字符。這解釋了為什么錯誤消息說字符串'abc'的屬性'0'不能分配新值。


所以解決方案是做student.password = passHash而不是Object.assign(student.password, passHash);


查看完整回答
反對 回復 2021-04-08
  • 1 回答
  • 0 關注
  • 221 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號