1

私はexpressとpassportjsを使ってfacebook認証をionic2アプリに追加しようとしています。私はほとんど認可の後にユーザーをionic2 appにリダイレクトする最後の部分を除いて動作させました。私の両方のアプリケーションは異なるポートで動作しています。 developers.facebook.comでアプリを作成しましfacebook-passport authentication with ionic2 and express app

  1. をし、アプリケーションIDと秘密IDを持って:ionic2これらは私が続くステップでhttp://localhost:8000

    上で実行されているバックエンドのもののためhttp://localhost:8100と急行アプリ上で実行されています。

  2. の下で製品> Facebookの>の設定は、私が追加したコールバックURL

    enter image description here

として<オール開始= "3">
  • そして、ローカルホスト上で実行されている私の急行アプリで:8000、 https://github.com/jaredhanson/passport-facebookに示したように、私はこのようなものであるFacebookの認証戦略を追加しました:

    passport.use(new FacebookStrategy({ 
        clientID: FACEBOOK_APP_ID, 
        clientSecret: FACEBOOK_APP_SECRET, 
        callbackURL: "http://localhost:8000/auth/facebook/callback" 
    }, 
    function(accessToken, refreshToken, profile, cb) { 
        User.findOrCreate({ facebookId: profile.id }, function (err, user) { 
         return cb(err, user); 
        }); 
    } 
    )); 
    
    app.get('/auth/facebook', 
    passport.authenticate('facebook')); 
    
    app.get('/auth/facebook/callback', 
        passport.authenticate('facebook', { failureRedirect: '/login' }), 
        function(req, res) { 
        // Successful authentication, redirect home. 
        res.redirect('/');  //how to redirect back to ionic app instead of/
    }); 
    

    ので、今、ユーザーがionic2アプリにFacebookのボタンをクリックするたびにそのフェイスブックの認証ページに行くと、それは正常にlocalhost:8000 /認証/フェイスブック/コールバックに期待どおりにリダイレクトされていますが、私は再びイオンアプリケーションにリダイレクトしたい。どうすればこの問題を解決できますか?これを解決するためのガイダンスが必要です。

  • 答えて

    0

    これが必要なのかどうかは分かりませんが、facebook認証を処理する新しいウィンドウを開くことができました。これは、以下の私のプロバイダで行われました:私のsuccessRedirectは次のようになります。

    public loginWithFacebook(callback : (data : any) => any){ 
        this.callback = callback; 
        this.childWindow = this.nativeWindow.open(this.authEndpoint); 
        this.closeTimer = setInterval(() => { 
         if (this.childWindow.closed){ 
         clearInterval(this.closeTimer); 
         this.childWindow = null; 
         this.closeTimer = null; 
         var passedJson = this.http.get(this.checkEndpoint).map(res => res.json()); 
         passedJson.subscribe(data => { 
          this.callback(data); 
         }); 
         } 
        }, 500); 
        } 
    

    これは、ウィンドウが閉じているかどうかを確認します。問題は、自動的に閉じなければならないことです。私は単純に、成功したリダイレクトレンダーが作成された新しいウィンドウを閉じるhtmlページを作成しました。ここにある私のsuccessRedirect

    router.get('/api/auth/facebook/success', function (req, res) { 
        res.render('after-auth'); 
    }); 
    

    あなたの特急アプリで、あなたのビューエンジンは、あなたのapp.js.に設定されていることを確認してください

    app.set('views', path.join(__dirname, 'views')); 
    app.set('view engine', 'html'); 
    

    あなたの意見は、/後-auth.htmlこれは今、新しいウィンドウを閉じ、この

    <!DOCTYPE html> 
    <html lang="en"> 
    <head> 
        <meta charset="UTF-8"> 
        <title>Title</title> 
    </head> 
    <body> 
        <script type="text/javascript"> 
         window.close(); 
        </script> 
    </body> 
    </html> 
    

    のようになります。私がまだ抱えている唯一の問題は、セッションが次の呼び出しを試してやると保存されていないように見えることです。 req.userは私にとってundefinedと思われる