0
我一直在试图解决这个问题,但我找不到我的错误。我一直在客户端使用JavaScript一段时间,并开始编写一本书。不幸的是,自从那时起,Facebook似乎已经改变了他们的oauth方法(例如,用户名似乎被弃用)。所以我的问题是这样的。要么如果我还没有登录到Facebook,我会重定向到FB。我登录,但卡在其网站上。 但是,如果我被锁定,我的浏览器会持续加载一分钟或2分钟,然后告诉我授权密钥已被使用。我希望也许你能帮助我。我的环境文件看起来像这样Facebook OAuth卡住
(development.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页我已经把我的应用程序域到本地主机上,而该网站的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] : '');
}
}
});
}
首先感谢您通过所有此代码来提供帮助。我真的很感激,因为我相当迷失在这里。再次感谢并
问候克里斯
呀。也发现了这一点,并即将发布。有时答案可以非常简单:)。非常感谢 – Chris