我是node.js开发的初学者,并尝试构建基于Express框架的应用程序。我实施了护照本地护照-facebook和passport-linkedin,供用户注册并登录应用程序,以及将多个社交帐户链接到mongoDb中的单个用户帐户(来自此tutorial)。
我的问题是,当使用passport-linkedin时,我总是会收到未定义的电子邮件字段,即使我可以使用经过正确身份验证的用户获取名字和姓氏。
passport.js
passport.use(new LinkedinStrategy({
consumerKey : configAuth.linkedinAuth.consumerKey,
consumerSecret : configAuth.linkedinAuth.consumerSecret,
callbackURL : configAuth.linkedinAuth.callbackURL,
passReqToCallback : true // allows us to pass in the req from our route (lets us check if a user is logged in or not)
},
function(req, token, tokenSecret, profile, done) {
// asynchronous
process.nextTick(function() {
// check if the user is already logged in
if (!req.user) {
User.findOne({ 'linkedin.id' : profile.id }, function(err, user) {
if (err)
return done(err);
if (user) {
// if there is a user id already but no token (user was linked at one point and then removed)
if (!user.linkedin.token) {
[...]
} else {
// if there is no user, create them
var newUser = new User();
newUser.linkedin.id = profile.id;
newUser.linkedin.token = token;
newUser.linkedin.firstname = profile.name.givenName;
newUser.linkedin.lastname = profile.name.familyName;
newUser.linkedin.email = profile.emails;
newUser.save(function(err) {
if (err)
return done(err);
return done(null, newUser);
});
}
});
} else {
// user already exists and is logged in, we have to link accounts
[...]
}
});
}));
路由/ accounts.js
// linkedin --------------------------------
// send to linkedin to do the authentication
app.get('/auth/linkedin', passport.authenticate('linkedin', { scope: ['r_basicprofile', 'r_emailaddress'] }));
// handle the callback after linkedin has authenticated the user
app.get('/auth/linkedin/callback',
passport.authenticate('linkedin', {
successRedirect : '/profile', // redirect to the secure profile section
failureRedirect : '/signup', // redirect back to the signup page if there is an error
failureFlash : true // allow flash messages
}));
我可以通过查看Passport-LinkedIn / lib / strategy.js找到保存到我的用户数据库中的名字和姓氏,然后我对profile.emails做了同样的事情仍然保留了#34; undefined"在确认用户之后。
提前感谢您的帮助。
编辑:来自LinkedIn开发者常见问题解答
虽然我们尚未宣布正式弃用OAuth 1.0a 结合LinkedIn的API,我们不再积极鼓励或 支持它的使用。
使用OAuth 1.0a构建的现有应用程序将继续使用 功能正常,直到我们正式公布它为止 日落。
强烈建议所有人使用或转换到OAuth 2.0 应用
答案 0 :(得分:0)
一段时间以前有同样的问题,现在让它运转起来。你试过oauth2了吗?如果您已经实施了passport-linkedin,那么这应该是对passport.js文件的微小更改。 LinkedIn弃用了OAuth 1.0,因此可能会导致某些问题导致检索某些信息。我猜你也面临同样的情况。试试这个,你应该好好去!