0

ExpressJS と PassportJS の Facebook 戦略を使用して、特定のプロパティが欠落している場合に呼び出される認証コールバックで条件付きリダイレクトを実行しようとしています。

私のユーザースキーマ:

var UserSchema = new Schema({
  id: ObjectId,
  uid: String,
  facebookToken: String,
  username: String,
  password: String,
  salt: String,
  firstName: String,
  lastName: String,
  email: String,
  birthday: Date,
  gender: String,
  location: String,
  phone: Number,
  verifiedPhone: Boolean,
  interests: {
    culture: Boolean,
    food: Boolean,
    business: Boolean,
    family: Boolean,
    learning: Boolean,
    sports: Boolean,
    movies: Boolean,
    music: Boolean,
    events: Boolean,
    nightlife: Boolean,
    health: Boolean,
    beauty: Boolean,
    fashion: Boolean,
    motoring: Boolean,
    electronics: Boolean,
    groceries: Boolean,
    travel: Boolean,
    decor: Boolean
  },
  weeklyNotifcation: Number,
  weeklyNotificationSent: Number,
  created: {type: Date, default: Date.now}
});

私のコールバック:

app.get('/auth/facebook/callback', passport.authenticate('facebook', { failureRedirect: '/login' }), function(req, res) {
  User.findOne({uid: req.session.uid}, function(err, user) {
    if(user.email || user.location || user.phone || user.location == undefined) {
      res.redirect('/register');
    } else {
      res.redirect('/');
    }
  });
});

呼び出された後、データはmongoに保存され/auth/facebookます。セッションの使用に対してDBをチェックし、DBに保存されていないためフィールドが返されないため、未定義かどうかを確認します。コールバックは失敗し、受信したデータは返されません。

どんな助けでも大歓迎です。

4

1 に答える 1

1
if(user.email === undefined || user.location === undefined || user.phone === undefined || user.location === undefined) {

おそらくあなたが意図したものです。また、おそらくerr変数をチェックして、エラーがあるかどうかを確認する必要があります。

于 2012-11-20T19:58:35.733 に答える