Passport.js本地策略不带mongoose
我试图find有关节点应用程序的最简单的login与护照资源。 我的意思是,使用:
中间件:
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.' }); } }) )
和redirect:
app.post('/login', passport.authenticate('local', { successRedirect: '/index.html', failureRedirect: '/login' }) );
我的应用程序结构
/app.js /public/index.html /public/login.html
就是这样。 networking充满了与插件的Mongoose相同的例子,每个人都只是互相粘贴。
重点在于,稍后我会在LocalStrategy代码中插入我自己的代码(可能会使用LDAP)。
目前,我只是收到index.html上的[object Object]
,而不是使用在公共文件夹中创build的页面redirect到/index.html。
你的passport.deserializeUser()
是不正确的:
passport.deserializeUser(function(id, done) { done({ id: id, nickname: "test"}) });
它传递“用户”对象作为第一个参数done
,这是保留的错误。 这会导致Express呈现错误页面,尝试对错误进行string化,从而导致[object Object]
。
尝试这个:
passport.deserializeUser(function(id, done) { done(null, { id: id, nickname: "test"}) });
发现问题! redirect不起作用,所以我回头看,注意到express.static mw在护照初始化()后被设置,而不是在BEFORE之前。 我只是把它移到顶部,然后..彩虹