[英]Handling firstname and lastname in passportjs
i want to know to handle user firstname and lastname in passportjs knowing i tried the folowing code:我想知道在passportjs中处理用户的名字和姓氏,知道我尝试了以下代码:
passport.use('local-register', new passportLocal (strategyOption, function (email, password, firstname, lastname, callback) {
console.log(' ------- pass :' + password);
console.log(' ------- email :' + email);
console.log(' ------- fname :' + firstname);
console.log(' ------- lname :' + lastname);
var searchedUser = {
email: email
};
User.findOne(searchedUser, function (err, user) {
if (err) return callback (err);
//console.log(user);
if (user) return callback (null, false, {
message: 'User do exist!'
});
var newUser = new User({
firstname: firstname,
lastname: lastname,
email: email,
password: password
});
newUser.save(function (err) {
if(err) console.log('hi');
callback (null, newUser);
});
});
}));
but in the console i got the following stuff:但在控制台中我得到了以下内容:
---- p: pass(the password giving) ---- email: the email... ---- fname: - here i got a wierd thing - ---- p: pass(密码给定) ---- email: email... ---- fname: - 这里我有一个奇怪的东西 -
------- fname :function verified(err, user, info) {
if (err) { return self.error(err); }
if (!user) { return self.fail(info); }
self.success(user, info);
} ------- lname:undefined } ------- lname:undefined
and the worst: unknown callback... so node can't handle the callback and when i delete the fname and the lname parameter.. everything works like a charm so does anyone know how to handle the fname and lname in passport?最糟糕的是:未知回调......所以节点无法处理回调,当我删除 fname 和 lname 参数时......一切都像魅力一样工作,所以有人知道如何处理护照中的 fname 和 lname 吗?
Thankx,谢谢,
The following code worked for me:以下代码对我有用:
Passport config:护照配置:
passport.use('local-signup', new localStrategy({
usernameField: 'email',
passwordField: 'password'
},
async (email, password, done) => {
try {const user = await UserModel.create({
email, password
})
console.log(`Welcome!`)
return done(null, user);
}
catch (error) {
console.log(`Signup error: ${error}`)
done(error)
}
}));
Node js route:节点js路由:
router.post(
'/signup',
function (req, res, next){ passport.authenticate('local-signup', { session: false }, async function (err, user, info) {
try {
await UserModel.findOneAndUpdate({email: req.body.email}, { firstName: req.body.firstName, lastName: req.body.lastName },
{new: true});
await req.login(
user, { session: false },
(err) => {
if (err) {
return next(err);
}
const payload = {
id: user._id, email: user.email
};
const token = jwt.sign(
payload,
process.env.JWT_TOKEN_SECRET);
console.log('JWT signed.');
res.status(200).json({
success: true,
token: `Bearer ${token}`,
user: {
id: user.id,
email: user.email,
firstName: user.firstName,
lastName: user.lastName
}
});
});
} catch (err) {
console.log('Passport Signup err: ' + err)
res.send('Sign up error: ' + err)
return next(err);
}
}
)(req, res, next)
})
In few words, I used "Model.findOneAndUpdate" inside the sign-up route to update the user's document with their first and last names.简而言之,我在注册路径中使用了“Model.findOneAndUpdate”来用他们的名字和姓氏更新用户的文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.