5

この質問が少し長くなってしまったことをお詫びしますが、私はこれにしばらく取り組んできたので、すべての話を説明する必要がありました.

背景: 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=_selfAngular ルーティングをスキップするために、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 アカウントの問題として報告されていました。いくつかの追加の試みがそこに投稿されましたが、まだ完全な修正ではありません.

4

2 に答える 2

0

@Claies の方法が機能しない場合、Facebook コールバックから# =フラグメントを削除していない可能性があります。

この投稿を読んでください

于 2015-11-26T03:33:04.690 に答える