如何检查用户Active(1)是否使用passport(node.js)?

时间:2016-11-04 15:07:35

标签: node.js express passport.js

我已经编写了登录逻辑,用户可以通过电子邮件或(移动)电话号码登录。它工作正常,但我需要在用户登录时验证另一个字段。

如果用户的电子邮件/电话号码已经存在,那么我需要检查用户是否为有效值'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);
  });
};

1 个答案:

答案 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 });
    }

同时创建一个策略,仅在登录后检查允许的页面,因此如果用户的会话在两者之间到期,则可以将其重定向到主页。