この質問が少し長くなってしまったことをお詫びしますが、私はこれにしばらく取り組んできたので、すべての話を説明する必要がありました.
背景: MEAN スタックに基づくアプリで、Passport.js を使用して Facebook のログインを承認しようとしています。
Passport.jsガイドに従って、次のようなものを実装しました。
// HTML
<a href="/connect/facebook" target="_self">Add a Facebook login</a>
// send to facebook to do the authentication
app.get('/connect/facebook',isLoggedIn, passport.authorize('facebook',
{ scope : 'email' })
);
// handle the callback after facebook has authorized the user
app.get('/connect/facebook/callback',
passport.authorize('facebook', {
successRedirect : '/profile',
failureRedirect : '/profile'
}));
target=_self
Angular ルーティングをスキップするために、html に注目してください。明らかに、承認は正常に機能します。ただし、ルーティングは Angular によって処理されるため、リダイレクトは機能しません。承認後、着陸することはありません/profile
(ただし、デフォルトの Angular ルート上)。
したがって、 JSON データを Angular に渡すことを期待して、 Passport.js hereで提案されているカスタム コールバックを試し、 Angular にルーティングを行わせました。私は最終的に次のようなことをしました:
// In the controller
$http.get("/connect/facebook").success(function(data){
// here I wait for json data from the server and do the routing
});
// I call this route from Angular
app.get('/connect/facebook',isLoggedIn,passport.authorize('facebook',
{ scope : 'email' })
);
// But Facebook lands here!
app.get('/connect/facebook/callback',function(req, res, next) {
passport.authorize('facebook', function(err, user, info) {
res.json({something:smtg});
...
Passport.js が説明しているように、明らかにカスタム コールバックはローカル ログインで機能します。しかし、ここで問題がわかりますか?Angular から呼び出します/connect/facebook
が、 から json を受け取る必要があります/connect/facebook/callback
。
私は Passport をあきらめようとしていますが、その前に/profile
、カスタム メッセージを使用して、FB 承認後に着陸できるような解決策はありますか? 読んでいただきありがとうございます。
編集: 同じ質問がPassport-Facebook GitHub アカウントの問題として報告されていました。いくつかの追加の試みがそこに投稿されましたが、まだ完全な修正ではありません.