node.js - 我正在使用猫鼬加密,当我运行我的服务器时出现错误:缺少身份验证代码
问题描述
我正确地将 mongoose.encryption 设置到我的代码中。我知道,因为当我转到“/注册”路线时,我的密码已正确加密。
app.get('/cadastrar', (req, res) => {
res.render('registrar');
});
app.post('/cadastrar', (req, res) =>{
const cadastro = req.body.cadastro;
User.create({nickname: cadastro.nickname, email: cadastro.email, password: cadastro.password},(err) => {
err ? console.log(err) : console.log('Successfully added a new user!'); res.render('/');
});
})
下面是我注册后的密码:
{
"_id" : ObjectId("5cbb2dce3014e52b34732df8"),
"nickname" : "Bulbassauro",
"email" : "bulba@pokemon.com",
"_ct" : { "$binary" : "YeLrW1jgdaT4IBFaBExr+Y4IUVkA5UtJoww6hYKqynAVg7OYjEuhJhQt2z2CtIBPHQ==", "$type" : "00" },
"_ac" : { "$binary" : "YUmRsA2QBkUw9fgyNTimqAeEPxsLgjtI4bLErh2FJmZCWyJfaWQiLCJfY3QiXQ==", "$type" : "00" },
"__v" : 0
}
我重构了我的代码,所以我有一个不同的文件来设置我的 mongoose.Schema:
const mongoose = require('mongoose');
const encrypt = require('mongoose-encryption');
const userSchema = new mongoose.Schema(
{
nickname : String,
email : String,
password : String
}
);
const secret = 'viciadoemjogo';
userSchema.plugin(encrypt, {secret: secret, encryptedFields:['password']});
module.exports = mongoose.model('User', userSchema);
下面是我的登录路线。但是我无法登录。这意味着我的密码没有被解密。那是我收到错误消息的时候:缺少身份验证代码
app.get('/login', (req, res) => {
res.render('registrar');
});
app.post('/login', (req, res) => {
const email = req.body.login.email;
const password = req.body.login.password;
User.findOne({email: email}, (err, foundUser) =>{
if(err){
console.log(err);
} else {
if(foundUser){
if(foundUser.password === password){
res.render('nivelamento');
}
}
}
});
});
谁能告诉我为什么我不能登录?
解决方案
错误来自 const email = req.body.login.email; 常量密码 = req.body.login.password;
它应该是 const email = req.body.email; 常量密码 = req.body.password;
一旦您将代码更新到此更改,一切都会正常工作。mongoose 加密的工作原理是,当你 save() 时它会加密,当你调用 find() 或 findOne() 时它会解密。因此,您正在将 pass-string 与 pass-string 而非 pass-hash 进行比较。
推荐阅读
- react-native - 无法删除事件侦听器应用程序状态 React Native
- octave - 错误:tf' 函数属于您已安装但未加载的 Octave Forge 控制包
- asp.net-core - 带有 AWS SQS 的 MassTransit - 发送动态消息的异常
- reactjs - React-native 错误 (: Unexpected token, expected ";" (7:5))
- javascript - 如何删除数组的空值,如果值不为空,则只显示数组并将其显示给用户
- javascript - JS 和 Vue.js 中的动态导入
- javascript - [ASPX][JavaScript][DevExpress] 回调后无限 location.reload() 循环
- swift - 从 API 检测响应的数据类型
- azure - 使用 azure AD B2C 进行 blazor web api 身份验证
- java - 为什么getVoiceInteractor()返回null?