Passport.js本地策略没有猫鼬

时间:2017-04-21 09:40:10

标签: node.js authentication passport.js

我正在尝试使用护照为节点应用找到最简单的登录资源。我的意思是,使用:

中间件:

    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({extended: false}));
    app.use(cookieParser());

    app.use(session({ secret: 'keyboard cat', resave: false, saveUninitialized: false }));
    app.use(passport.initialize());
    app.use(passport.session());

    app.use(express.static('public'));

护照:

passport.serializeUser(function(user, done) {
    done(null, user.id);
});

passport.deserializeUser(function(id, done) {
    done({ id: id, nickname: "test"})
});


    passport.use(new LocalStrategy(
      function(username, password, done) {
        console.log("test");
          if (username === 'username') {
              return done(null, { name: "test", id: '1234'});
          } else {
              return done(null, false, { message: 'Incorrect cred.' });
          }
      })
    )

和重定向:

    app.post('/login',
      passport.authenticate('local', { 
          successRedirect: '/index.html',
          failureRedirect: '/login'
     })
    );

我的应用结构:

/app.js
/public/index.html
/public/login.html

就是这样。 Web上充满了与插件相同的Mongoose示例,每个人都只是简单地相互粘贴。

关键是,我希望稍后在LocalStrategy代码中插入我自己的代码(可能会使用LDAP)。

目前,我没有使用在公共文件夹中创建的页面重定向到/index.html,而是在index.html上收到[object Object]

2 个答案:

答案 0 :(得分:2)

您的passport.deserializeUser()不正确:

passport.deserializeUser(function(id, done) {
  done({ id: id, nickname: "test"})
});

它正在通过"用户" object作为done的第一个参数,它是为错误保留的。这会导致Express呈现错误页面,尝试将错误字符串化,从而生成[object Object]

试试这个:

passport.deserializeUser(function(id, done) {
  done(null, { id: id, nickname: "test"})
});

答案 1 :(得分:0)

发现问题!重定向不起作用,所以我回头看了一下,注意到express.static mw是在护照initialize()之后设置的,而不是BEFORE。我把它移到了顶部和..彩虹