Node.js 使用;用户名";Jwt和passport中的字段
我正在使用node.js和passport.js使用jwt。如果我使用电子邮件作为用户名,我可以进行身份验证。但是如果我使用实际的用户名,我无法使它工作。这给了我一个“电子邮件未注册”的错误。下面是我如何实现它的: passport.jsNode.js 使用;用户名";Jwt和passport中的字段,node.js,jwt,passport.js,Node.js,Jwt,Passport.js,我正在使用node.js和passport.js使用jwt。如果我使用电子邮件作为用户名,我可以进行身份验证。但是如果我使用实际的用户名,我无法使它工作。这给了我一个“电子邮件未注册”的错误。下面是我如何实现它的: passport.js passport.use( new localStrategy({ usernameField: 'email' }, (username, password, done) => { User.findOn
passport.use(
new localStrategy({ usernameField: 'email' },
(username, password, done) => {
User.findOne({ email: username },
(err, user) => {
if (err)
return done(err);
// unknown user
else if (!user)
return done(null, false, { message: 'Email is not registered' });
// wrong password
else if (!user.verifyPassword(password))
return done(null, false, { message: 'Wrong password.' });
// authentication succeeded
else
return done(null, user);
});
})
);
var userSchema = new mongoose.Schema({
firstName: {
type: String,
required: 'First name can\'t be empty'
},
middleName: {
type: String,
},
lastName: {
type: String,
required: 'Last name can\'t be empty'
},
userName: {
type: String,
required: 'Username can\'t be empty'
},
email: {
type: String,
required: 'Email can\'t be empty',
unique: true
},
password: {
type: String,
required: 'Password can\'t be empty',
minlength : [4,'Password must be atleast 4 character long']
},
saltSecret: String,
isActivated: {
type: Boolean,
},
dateAdded: {
type: Date
}
});
module.exports.authenticate = (req, res, next) => {
// call for passport authentication
passport.authenticate('local', (err, user, info) => {
// error from passport middleware
if (err) return res.status(404).json(err);
// registered user
if (user) return res.status(200).json({ "token": user.generateJwt() });
// unknown user or wrong password
else return res.status(401).json(info);
})(req, res);
}
user.model.js
passport.use(
new localStrategy({ usernameField: 'email' },
(username, password, done) => {
User.findOne({ email: username },
(err, user) => {
if (err)
return done(err);
// unknown user
else if (!user)
return done(null, false, { message: 'Email is not registered' });
// wrong password
else if (!user.verifyPassword(password))
return done(null, false, { message: 'Wrong password.' });
// authentication succeeded
else
return done(null, user);
});
})
);
var userSchema = new mongoose.Schema({
firstName: {
type: String,
required: 'First name can\'t be empty'
},
middleName: {
type: String,
},
lastName: {
type: String,
required: 'Last name can\'t be empty'
},
userName: {
type: String,
required: 'Username can\'t be empty'
},
email: {
type: String,
required: 'Email can\'t be empty',
unique: true
},
password: {
type: String,
required: 'Password can\'t be empty',
minlength : [4,'Password must be atleast 4 character long']
},
saltSecret: String,
isActivated: {
type: Boolean,
},
dateAdded: {
type: Date
}
});
module.exports.authenticate = (req, res, next) => {
// call for passport authentication
passport.authenticate('local', (err, user, info) => {
// error from passport middleware
if (err) return res.status(404).json(err);
// registered user
if (user) return res.status(200).json({ "token": user.generateJwt() });
// unknown user or wrong password
else return res.status(401).json(info);
})(req, res);
}
user.controller.js
passport.use(
new localStrategy({ usernameField: 'email' },
(username, password, done) => {
User.findOne({ email: username },
(err, user) => {
if (err)
return done(err);
// unknown user
else if (!user)
return done(null, false, { message: 'Email is not registered' });
// wrong password
else if (!user.verifyPassword(password))
return done(null, false, { message: 'Wrong password.' });
// authentication succeeded
else
return done(null, user);
});
})
);
var userSchema = new mongoose.Schema({
firstName: {
type: String,
required: 'First name can\'t be empty'
},
middleName: {
type: String,
},
lastName: {
type: String,
required: 'Last name can\'t be empty'
},
userName: {
type: String,
required: 'Username can\'t be empty'
},
email: {
type: String,
required: 'Email can\'t be empty',
unique: true
},
password: {
type: String,
required: 'Password can\'t be empty',
minlength : [4,'Password must be atleast 4 character long']
},
saltSecret: String,
isActivated: {
type: Boolean,
},
dateAdded: {
type: Date
}
});
module.exports.authenticate = (req, res, next) => {
// call for passport authentication
passport.authenticate('local', (err, user, info) => {
// error from passport middleware
if (err) return res.status(404).json(err);
// registered user
if (user) return res.status(200).json({ "token": user.generateJwt() });
// unknown user or wrong password
else return res.status(401).json(info);
})(req, res);
}
我需要使用“用户名”和“密码”字段进行身份验证,而不是电子邮件。我之所以使用电子邮件,是因为我所遵循的是教程中使用的内容。多谢各位
以下是我如何尝试实施以获得我需要的,但它不起作用:
passport.use(
new localStrategy({ usernameField: 'userName' },
(username, password, done) => {
User.findOne({ userName: username },
(err, user) => {
if (err)
return done(err);
// unknown user
else if (!user)
return done(null, false, { message: 'Useris not registered' });
// wrong password
else if (!user.verifyPassword(password))
return done(null, false, { message: 'Wrong password.' });
// authentication succeeded
else
return done(null, user);
});
})
);
试试这个
passport.use(
new localStrategy({ usernameField: 'userName' },
(username, password, done) => {
User.findOne({ userName: username},
(err, user) => {
if (err)
return done(err);
// unknown user
else if (!user)
return done(null, false, { message: 'Email is not registered' });
// wrong password
else if (!user.verifyPassword(password))
return done(null, false, { message: 'Wrong password.' });
// authentication succeeded
else
return done(null, user);
});
})
)
在您的前端表单上,不是只有两个字段可供登录吗?一个用于密码,另一个用于电子邮件/用户名?或者你是单独使用电子邮件和用户名表单吗?我只需要使用用户名。在后端和前端,我想使用用户名而不是电子邮件。我已更新了我的答案,请确保您正在请求正文中发送
username
。