【问题标题】:Error: Unknown authentication strategy "[object Object]"错误:未知的身份验证策略“[object Object]”
【发布时间】:2015-04-03 09:31:57
【问题描述】:

POST localhost/api/login 和(正确的)数据 username=test password=test 给出以下信息:

Error: Unknown authentication strategy "[object Object]"
   at attempt (/var/www/node_modules/passport/lib/middleware/authenticate.js:166:37)
   at authenticate (/var/www/node_modules/passport/lib/middleware/authenticate.js:342:7)
   at Layer.handle [as handle_request] (/var/www/node_modules/express/lib/router/layer.js:82:5)
   at next (/var/www/node_modules/express/lib/router/route.js:110:13)
   at Route.dispatch (/var/www/node_modules/express/lib/router/route.js:91:3)
   at Layer.handle [as handle_request] (/var/www/node_modules/express/lib/router/layer.js:82:5)
   at /var/www/node_modules/express/lib/router/index.js:267:22
   at Function.proto.process_params (/var/www/node_modules/express/lib/router/index.js:321:12)
   at next (/var/www/node_modules/express/lib/router/index.js:261:10)
   at SessionStrategy.strategy.pass (/var/www/node_modules/passport/lib/middleware/authenticate.js:318:9)

路线:

app.post('/api/login', passport.authenticate(new LocalStrategy(function(username, password, done) {
  db.User.findOne({username: username}, function(err, user) {
    if (err) return done(err);
    if (!user) return done(null, false, { message: 'Username or password incorrect' });
    bcrypt.compare(password, user.passHash, function(err, res) {
      if (err) return done(err);
      if (!res) return done(null, false, { message: 'Username or password incorrect' });
      return done(null, user);
    })
  })
})))

我有 bodyParser 正在运行,并且我知道它在我的注册路线上工作。这里发生了什么?我一直在使用http://passportjs.org/guide 指南,它已经掌握了基础知识,但为什么会发生这种情况?

【问题讨论】:

    标签: node.js express mongoose passport.js


    【解决方案1】:

    authenticate() 不接受对象,它接受一个包含您之前配置的策略名称的字符串。您的 new LocalStrategy() 是传递给 passport.use() 的内容。

    所以你在你的中间件定义中这样做:

    passport.use(new LocalStrategy(function(username, password, done) {
      db.User.findOne({username: username}, function(err, user) {
        if (err)
          return done(err);
        if (!user)
          return done(null, false, { message: 'Username or password incorrect' });
        bcrypt.compare(password, user.passHash, function(err, res) {
          if (err)
            return done(err);
          if (!res)
            return done(null, false, { message: 'Username or password incorrect' });
          return done(null, user);
        })
      })
    }));
    

    你为你的路线做这样的事情:

    app.post('/api/login',
      passport.authenticate('local'),
      function(req, res) {
        // authentication successful
      });
    

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 2022-01-11
      • 2014-02-22
      • 2017-04-01
      • 2021-12-15
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多