【发布时间】:2017-03-21 05:54:17
【问题描述】:
我已经尝试了一天来解决这个问题,但我找不到我的错误。我在客户端使用 JavaScript 已经有一段时间了,并开始阅读一本书。不幸的是,从那时起,facebook 似乎已经稍微改变了他们的 oauth 方法(例如,用户名似乎已被弃用)。所以我的问题是这个。如果我还没有登录 facebook,我会被重定向到 fb。我登录,但卡在其网站上。 但是,如果我被锁定,我的浏览器只会继续加载一两分钟,然后告诉我身份验证密钥已被使用。我希望也许你能帮助我。我的环境文件是这样的
(开发.js)
module.exports = {
//Development configuration options
db : 'mongodb://localhost/mean-book',
sessionSecret : 'developmentSessionSecret',
facebook : {
clientId : '*************',
clientSecret : '************************',
callbackURL : 'http://localhost:3000/oauth/facebook/callback'
}
};
在developers.facebook 页面上,我将我的应用程序域设置为localhost,并将站点URL 设置为http://localhost:3000/oauth/facebook/callback。我在那里尝试了很多变化。到目前为止没有任何帮助。这就是我的策略的样子
facebook.js
var passport = require('passport'),
url = require('url'),
FacebookStrategy = require('passport-facebook').Strategy,
config = require('../config'),
users = require('../../app/controllers/users.server.controller');
module.exports = function(){
passport.use(new FacebookStrategy({
clientID : config.facebook.clientId,
clientSecret : config.facebook.clientSecret,
callbackURL : config.facebook.callbackURL,
profileFields : ['id','email', 'name', 'displayName', 'gender', 'profileUrl'],
passReqToCallback : true
},
function(req, accessToken, refreshToken, profile, done){
var providerData = profile._json;
providerData.accessToken = accessToken;
providerData.refreshToken = refreshToken;
console.log('------PROFILE-----');
console.log(profile);
console.log('------END PROFILE-------')
var providerUserProfile = {
firstName : profile.name.givenName,
lastName : profile.name.familyName,
fullName : profile.displayName,
username : profile.id,
email : profile.emails[0].value,
provider : 'facebook',
providerId : profile.id,
providerData: providerData
};
console.log('---------------');
console.log(providerUserProfile);
console.log('---------------')
users.saveOAuthUserProfile(req, providerUserProfile, done);
}));
};
我的护照配置如下所示
(passport.js)
var passport = require('passport'),
mongoose = require('mongoose');
module.exports = function(){
var User = mongoose.model('User');
passport.serializeUser(function(user, done){
done(null, user.id);
});
passport.deserializeUser(function(id, done){
User.findOne({
_id: id
}, '-password -salt', function(err, user){
done(err, user);
});
});
require('./strategies/local.js')();
require('./strategies/facebook.js')();
};
最后我的路线使用这种方法
exports.saveOAuthUserProfile = function(req, profile, done){
User.findOne({
provider : profile.provider,
providerId : profile.providerId
}, function(err, user){
if(err){
return done(err);
} else {
if(!user){
var possibleUsername = profile.username || ((profile.email) ? profile.email.split('@')[0] : '');
}
}
});
}
首先感谢您通过所有这些代码提供帮助。我真的很感激,因为我在这里迷路了。再次感谢和
问候克里斯
【问题讨论】:
标签: javascript node.js facebook oauth passport.js