0

私のアプリは NodeJS、ExpressJS、および AngularJS で実行されます。PassportJS を使用して Facebook 認証を行おうとしています。不要なコードを大量に投稿するのを避けるために、Passport コードが意図したとおりに機能し、Facebook にログインし、トークンを取得して応答を受信するとだけ言っておきましょう。

ExpressJS では、私のルートは次のように設定されています。

app.get('/', routes.index);
app.get('/fbauth', passport.authenticate('facebook', { scope: 'email' }));
app.get('/fbauthed', passport.authenticate('facebook',{ failureRedirect: '/' }), routes.loggedin);
app.get('/logout', function(req, res) {
  req.logOut();
  res.redirect('/');
});

私のサーバーは にセットアップされていlocalhost:3000ます。

質問

私の問題は、Angular がこれでまったく動作しないことです。自分のページにhref="/fbauth"(これは に移動しlocalhost:3000/fbauthます) に移動するリンクを配置すると、アドレス バーが一瞬 に変化しlocalhost:3000/fbauth、メインlocalhost:3000ページがリロードされます。

ただし、localhost:3000/fbauthアドレスバーに入力すると、認証が行われ、facebook -> に渡されlocalhost:3000/fbauthedます。

これは、Angular ルートがリンク内の URL を「乗っ取ろう」としているために発生していると思います<a>が、それを達成する方法がわかりません。Angular ルートを次のように構成しようとしました。

when('/fbauth', {
        redirectTo: '/fbauth'
      }).

しかし、これは空白の画面をロードします。2つを連携させるにはどうすればよいですか?

4

1 に答える 1

5

target="_self" を追加すると、Angular 1.0.1 で機能します。

Facebookでサインイン

この機能は文書化されています ( http://docs.angularjs.org/guide/dev_guide.services .$location - '_self' を検索)

興味がある場合は、Angular ソース (行 5365 @ v1.0.1) を見てください。クリック ハイジャックは、!elm.attr('target') が true の場合にのみ発生します。

于 2013-07-22T07:27:13.870 に答える