2017-03-27 77 views
3

我的網頁https://localhost:3000/#/loginhttps://localhost:3000/#/new工作,https://localhost:3000/#/new有一個按鈕,通過passportjs做Facebook登錄。下面是相關的代碼:驗證回撥錯誤

auth.js

module.exports = { 
    'facebookAuth': { 
     'clientID': '1416536398420xxx', 
     'clientSecret': '...', 
     'callbackURL': 'https://localhost:3000/#/auth/facebook/callback' 
    } 
} 

passport.js

passport.use(new FacebookStrategy({ 
    clientID: configAuth.facebookAuth.clientID, 
    clientSecret: configAuth.facebookAuth.clientSecret, 
    callbackURL: configAuth.facebookAuth.callbackURL 
}, 
    function (accessToken, refreshToken, profile, done) { 
     process.nextTick(function() { 
      User.findOne({ 'facebook.id': profile.id }, function (err, usr) { 
       if (err) return done(err); 
       if (user) return done(null, user); 
       else { 
        var newUser = new User(); 
        newUser.facebook.id = profile.id; 
        newUser.facebook.token = accessToken; 
        newUser.facebook.name = profile.name.givenName + ' ' + profile.name.familyName; 
        newUser.facebook.email = profile.emails[0].value; 
        newUser.save(function (err) { 
         if (err) throw err; 
         return done(null, newUser) 
        }) 
       } 
      }) 
     }) 
    } 
)); 

index.js

router.get('/auth/facebook', passport.authenticate('facebook', { scope: ['email'] })); 

router.get('/auth/facebook/callback', 
    passport.authenticate('facebook', { successRedirect: '/login', 
             failureRedirect: '/login' })); 

通過點擊Facebook登錄按鈕,它重定向到Facebook登錄頁面,輸入用戶名和密碼後密碼,地址變爲https://localhost:3000/?code=AQCh9Q9KgZjL3TzTpyMW61gxcNZjN2vEgQAvr5r1k9-WxjwfmVzsPL9Txu-oTkP08MJXyvmJiGEt8zrgHGjLAbpg3SsvCGQEM1jdxwj4YUGL5dmUU3Xm7JZZfUOcCqaGuLSEFcfX-s62-X6uUuPS0D62wWzrAI-NK6gdvudl_JzWBK2O5ptdhGhN8PbbLytGpySEsIY8VVKaI55Tu6fjYA9v2R7Fp_7R2c4krdhA8Pp2A3Z9dQDpg42cZLzxuUtDVqxaPHFNZOufETiE23GxSCObjdq_oSmWkgAVOH1sa2EtPzjawohDZllNmNF-8iGLQQ0#/auth/facebook/callback

因此,它掛起;該頁面爲空白。

有人知道我的路線有什麼問題嗎?

編輯1:我剛剛加入Valid OAuth redirect URIs,但url地址仍然完成#/auth/facebook/callbak

enter image description here

+0

什麼URL在您的「有效的OAuth重定向URI」在facebook oauth設置頁面中? – Ken

+0

請參閱我的更新... – SoftTimur

+0

哇,我真的希望這不是您的實際OAuth憑證... – Paul

回答

1

您的路由器在URL路徑的根尋找/auth/facebook/callback。我不知道爲什麼,但Facebook將其代碼放在URL的根部。

如下

router.get(/auth\/facebook\/callback$/, 
     passport.authenticate('facebook', { successRedirect: '/login', 
            failureRedirect: '/login' })); 
+0

它不起作用...仍然有同樣的效果... – SoftTimur

2

這僅僅是方式查詢參數(搜索),散列的工作改變你的路由器。

哈希參數不傳遞給服務器,它對客戶端很有用。查詢優先於散列。

您可以在瀏覽器中自己嘗試。打開任何網頁(我假設這裏是localhost),並使用控制檯

window.location.hash = 'someHash' 

強制查詢參數,哈希PARAM在URL中的URL會更新到localhost/#someHash

現在做

window.location.search = 'someQueryParam=value' 

請注意,URL更改爲localhost/?someQueryParam=value#someHash

要完成此操作的唯一方法是使用路由器h工作時沒有#符號。散列路由器只是客戶端。

這與Facebook的回撥網址或護照無關。

我希望這會有所幫助。

+0

@SoftTimur請接受答案是否對你有幫助。 – gargsms

+0

謝謝你的解釋。我同意我們需要讓我的angularjs應用程序在沒有'#'符號的情況下工作。所以它歸結爲[這個谷歌帳戶]相同的問題(http://stackoverflow.com/questions/43060377/workaround-for-fragment-urls-not-allowed-with-google-redirect-uri),和我仍然沒有得到它的工作.... – SoftTimur