passport.js - Facebook 战略与工兵和波尔卡
问题描述
我需要与 polka(不是 Express)建立联系并使用护照-facebook 策略。在我的 serverjs 上:
var app = polka();
passport.serializeUser(function(user, cb){
return cb(null, profile);
});
passport.deserializeUser(function(obj, cb){
return cb(null, obj);
});
passport.use(new Strategy({
clientID: *****,
clientSecret: '******',
callbackURL: 'http://localhost:3000/login/facebook/callback',
//campo opzionale, specifico gli oggetti del profilo che voglio tornato
profile: ['id', 'displayName']
},
function(accessToken, refreshToken, profile, done) {
//Check the DB to find a User with the profile.id
User.findOne({ uid: profile.id }, function(err, user) {
if(err) {
console.log(err); // handle errors!
}
if (user) {
console.log("find user!", user);
done(null, user); //Login if User already exists
} else { //else create a new User
user = new User({
uid: profile.id, //pass in the id and displayName params from Facebook
name: profile.displayName
});
user.save(function(err) { //Save User if there are no errors else redirect to login.
if(err) {
console.log(err); // handle errors!
} else {
console.log("saving user ...");
done(null, user);
console.log("user", user);
}
});
}
});
}
));
app
//va sempre messo prima di passport.session
.use(require('express-session')({ secret: 'keyboard cat', resave: true, saveUninitialized: true }))
.use(passport.initialize())
.use(passport.session())
//definisco le rotte
//rotta di login
.get('/login/facebook',
passport.authenticate('facebook')
)
//callback
.get('/login/facebook/callback',
//da confermare se è supportato il fialureRedirect
//passport.authenticate('facebook', {failureRedirect: '/'}),
passport.authenticate('facebook', {failureRedirect: '/'}),
function(req, res){
res.writeHead(302, {
'Location': '/admin/menu',
'content-type': 'document'
});
res.end();
}
)
.use(
compression({ threshold: 0 }),
sirv('static', { dev }),
formData.parse(options),
formData.format(),
//formData.stream(),
formData.union(),
json(),
sapper.middleware()
)
当我登录时,控制台还显示我已经登录(它还在 mongodbclient 上创建了一个对象,并且也找到了它),但问题是在某个 url 上重定向我
http://localhost:3000/login/facebook/callback?code=AQBBJIV61HxahPCtWBgMR23OMpU8MXfxDcD3BeRDTUw2rK5FvTnXq5n...
带有消息“未定义配置文件”
在控制台上我有这个待定
解决方案
在 serializeUser 上,您返回从未声明您必须使用的配置文件:
passport.serializeUser(function(user, cb){
return cb(null, user);
});
推荐阅读
- node.js - 猫鼬阿特拉斯连接挂
- vue.js - Vue:在函数承诺中丢失“this”的上下文
- python - 如何从列表列表中创建一个 numpy 数组
- python - 在 Pandas 中重复后正确拆分 CSV 文件
- javascript - 浏览器 url 中的 javascript 命令弹出警报
- java - 如何在java中按对象属性拆分ArrayList?
- java - 使用 mockito 在测试类中模拟新实例的创建
- unity3d - 每个 Tilemap Tile 数据存储和检索
- ios - 为什么我的代表只通过数组的第一个成员?
- python - 通过 PyCharm 运行的脚本比直接在命令行中运行时执行得更好