我已经编写了登录逻辑,用户可以通过电子邮件或(移动)电话号码登录。它工作正常,但我需要在用户登录时验证另一个字段。
如果用户的电子邮件/电话号码已经存在,那么我需要检查用户是否为有效值'0'或'1'。如果用户'0'用户未验证我需要发送错误消息的时间你尚未验证。它的'1'然后用户能够继续该过程
有效意味着:
有效:1
我该怎么做?
我的用户架构:
var UserSchema = new Schema({
name: String,
email: { type: String, lowercase: true },
mobilenumber: {
type: String,
trim: true,
},
Active: {
type: String,
trim: true,
default: '0',
},
});
护照:
exports.setup = function (User, config) {
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password' // this is the virtual field on the model
},
function(email, password, done) {
var criteria = (email.indexOf('@') === -1) ? {
mobilenumber: email
} : {
email: email
};
User.findOne(criteria, function(err, user) {
if (err) return done(err);
if (!user) {
return done(null, false, { message: 'This email or mobilenumber is not registered.' });
}
if (!user.authenticate(password)) {
return done(null, false, { message: 'This password is not correct.' });
}
return done(null, user);
});
}
));
};
我的控制器:
exports.show = function (req, res, next) {
var userId = req.params.id;
User.findById(userId, function (err, user) {
if (err) return next(err);
if (!user) return res.status(401).send('Unauthorized');
res.json(user.profile);
});
};
答案 0 :(得分:0)
如果身份验证成功,您应该在会话中保存有关用户的一些信息,然后您可以检查用户的ID是否存在。
在AuthController.js
或您正在使用的任何控制器中
usr = req.user.auth_data;
//check if the user already exists with that id.
if ( req.user.user_data.id ) {
UserInfo.findOne ( {user_id:req.user.user_data.id} ).exec(function (err,userDetails){
if (err) {
return res.send ( {error:err} );
} else if (!req.user.user_data.email) {
return res.view ('form/email');
} else if (!userDetails) {
// we have phone number already available
return res.redirect('/profile');
} else {
return res.redirect('/dashboard');
}
});
} else {
//its a new user show user a form for entrering the minimal necessary details.
return res.view('form/emailphone',{ userDetails : req.user.user_data });
}
同时创建一个策略,仅在登录后检查允许的页面,因此如果用户的会话在两者之间到期,则可以将其重定向到主页。