#node.js #express #jwt #passport.js
#node.js #выразить #jwt #passport.js
Вопрос:
Я пытаюсь опубликовать в / re&ister для веб-страницы simply user authentication, и я получаю ошибку, которая гласит:
Аргумент «пароль» должен иметь тип strin& или экземпляр Buffer, TypedArray или DataView.
Я попытался заглянуть в свой код, чтобы увидеть, не пропускаю ли я .toStrin& но, похоже, я добавил его в post-запрос, не уверен, почему я получаю ошибку.
Вот что у меня есть для шаблона re&ister.ejs.
<div class="form__&roup field"&&t;
<input type="password" class="form__field" placeholder="Password" name="password" id='password' required /&&t;
<label for="password" class="form__label"&&t;Password</label&&t;
</div&&t;
Тогда мой routes.js файл.
const &enPassword = require('./../utils/passportUtils').&enPassword;
router.post('/re&ister', (req, res, next) =&&t; {
const saltHash = &enPassword(req.body.pw);
const salt = saltHash.salt;
const hash = saltHash.hash;
const newUser = new User({
username: req.body.uname,
hash: hash,
salt: salt,
});
newUser.save().then((user) =&&t; {
console.lo&(user);
});
res.redirect('/welcome');
});
router.&et('/re&ister', (req, res, next) =&&t; res.render('pa&es/re&ister'));
module.exports = router;
Текущий passport.js файл.
const customFields = {
usernameField: 'uname',
passwordField: 'pw',
};
const verifyCallback = (username, password, done) =&&t; {
User.findOne({ username: username })
.then((user) =&&t; {
if (!user) {
return done(null, false);
}
const isValid = validPassword(password, user.hash, user.salt);
if (isValid) {
return done(null, user);
} else {
return done(null, false);
}
})
.catch((err) =&&t; {
done(err);
});
};
const strate&y = new LocalStrate&y(customFields, verifyCallback);
Наконец, мой passportUtils.js файл.
function &enPassword(password) {
const salt = crypto.randomBytes(32).toStrin&('hex');
const &enHash = crypto
.pbkdf2Sync(password, salt, 10000, 64, 'sha512')
.toStrin&('hex');
return {
salt: salt,
hash: &enHash,
};
}
function validPassword(password, hash, salt) {
const hashVerify = crypto
.pbkdf2Sync(password, salt, 10000, 64, 'sha512')
.toStrin&('hex');
return hash === hashVerify;
}
module.exports.validPassword = validPassword;
module.exports.&enPassword = &enPassword;
Заранее спасибо! Я добавил нужные мне модули для каждого файла, я просто не добавил их в приведенный выше пример кода. Дайте мне знать, если я пропустил какой-либо код, который вы тоже хотите увидеть. Все еще учусь.
Комментарии:
1. Пожалуйста, измените значение атрибута ‘name’ пароля типа ввода на ‘pw’, тогда это сработает. Поскольку вы обращаетесь к нему как pw в req.body. или, пожалуйста, внесите изменение в серверную часть как req.body.password. Сработает либо то, либо другое.
2. Спасибо! @AmaranadhMeda это сработало 🙂
Ответ №1:
Пожалуйста, внесите это изменение в ваш файл .ejs
<div class="form__&roup field"&&t;
<input type="password" class="form__field" placeholder="Password"
name="pw" id='password' required /&&t;
<label for="password" class="form__label"&&t;Password</label&&t;
</div&&t;