我正在尝试使用护照为节点应用找到最简单的登录资源。我的意思是,使用:
中间件:
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]
。
答案 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。我把它移到了顶部和..彩虹