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