passport.js 中的 Date.now 无法完成

Posted

技术标签:

【中文标题】passport.js 中的 Date.now 无法完成【英文标题】:Date.now in passport.js cannot be done 【发布时间】:2016-11-21 21:52:10 【问题描述】:

我想在我的 nodejs 网站中通过 facebook 创建用户时分配 registerdate。我用的是护照。 如果我使用本地提供程序,则可以在我的 Mongoose Schema 中使用

regisDate: 
    type:Date,
    'default': Date.now
  ,

但是在护照 facebook 这是我的代码:

function(accessToken, refreshToken, profile, done) 
    User.findOne('facebook.id': profile.id).exec()
      .then(user => 
        if (user) 
          return done(null, user);
        

        user = new User(

          firstName: profile.first_name,
          lastName: profile.last_name,
          address: '',
          regisDate: Date.now,
          birthday: profile.birthday,

          email: profile.emails[0].value,
          role: 'user',
          provider: 'facebook',
          facebook: profile._json
        );
        user.save()
          .then(user => done(null, user))
          .catch(err => done(err));
      )
      .catch(err => done(err));
  ));

当继续时它会在这样的页面中返回错误。

ValidationError: CastError: Cast to Date failed for value "function now()  [native code] " at path "regisDate"
   at MongooseError.ValidationError (/home/gema/Desktop/stash/tx/node_modules/mongoose/lib/error/validation.js:22:11)
   at model.Document.invalidate (/home/gema/Desktop/stash/tx/node_modules/mongoose/lib/document.js:1411:32)
   at model.Document.set (/home/gema/Desktop/stash/tx/node_modules/mongoose/lib/document.js:696:10)
   at model.Document.set (/home/gema/Desktop/stash/tx/node_modules/mongoose/lib/document.js:541:18)
   at model.Document (/home/gema/Desktop/stash/tx/node_modules/mongoose/lib/document.js:67:10)
   at model.Model (/home/gema/Desktop/stash/tx/node_modules/mongoose/lib/model.js:41:12)
   at new model (/home/gema/Desktop/stash/tx/node_modules/mongoose/lib/model.js:3200:11)
   at passport.js:24:16
From previous event:
   at model.wrappedPointCut [as save] (/home/gema/Desktop/stash/tx/node_modules/mongoose/lib/document.js:1893:14)
   at passport.js:37:14
   at tryOnImmediate (timers.js:534:15)
   at processImmediate [as _immediateCallback] (timers.js:514:5)
From previous event:
   at Strategy._verify (passport.js:19:8)
   at /home/gema/Desktop/stash/tx/node_modules/passport-oauth2/lib/strategy.js:193:24
   at /home/gema/Desktop/stash/tx/node_modules/passport-facebook/lib/strategy.js:181:5
   at passBackControl (/home/gema/Desktop/stash/tx/node_modules/oauth/lib/oauth2.js:125:9)
   at IncomingMessage.<anonymous> (/home/gema/Desktop/stash/tx/node_modules/oauth/lib/oauth2.js:143:7)
   at emitNone (events.js:85:20)
   at IncomingMessage.emit (events.js:179:7)
   at endReadableNT (_stream_readable.js:913:12)
   at _combinedTickCallback (internal/process/next_tick.js:74:11)
   at process._tickCallback (internal/process/next_tick.js:98:9)

如何通过护照正确调用 Date.now 功能? 谢谢。

【问题讨论】:

【参考方案1】:

Date.now是一个函数,你应该这样使用它:Date.now()如果你想得到一个时间戳

【讨论】:

嘿,谢谢!无论如何,我还有另一个我没有注意到的奇怪解决方案。所以我在我的 users.model 模式中声明 regisDate: type: Date, 'default': Date.now 它可以工作。因此我不必把它放在我的 passport.js 中

以上是关于passport.js 中的 Date.now 无法完成的主要内容,如果未能解决你的问题,请参考以下文章

验证 Passport.js 中的访问权限/组

passport.js 中的多个模型

passport.js 中的本地和 Google 策略:序列化用户时的问题

Passport.JS 卡在重定向

如何正确使用 Passport.js?

passport.js 做啥以及我们为啥需要它?