2017-03-22 10 views
0

パスポート・フェイスブックで認証し、facebookのユーザーIDとユーザー名をdbに格納することができます。私は角コントローラからnodejsを照会しています:AngularからNodejsにpassportjsで照会

ノードで
MyApp.controller("FacebookLogin", function($scope, $http){ 

    $scope.login = function(){ 
    $http.get("/facebooklogin").then(function(response){ 
      if(response.data){ 
       console.log(response.data); // nothing is logged here 
      } else { 
       console.log("No Data"); 
      } 
     }); 
    } 
}); 

app.get('/facebooklogin', passport.authenticate('facebook')); 

app.get('/auth/facebook/callback', passport.authenticate('facebook', function(err, user, info){ 
    console.log(err, user, info); 
    if(err) throw err; 
    // res.send(user); //Do I send the user info from here? 
})); 

私はのlocalStorageに保存し、将来の要求のためのDBを照会するためにそれを使用するために、角にユーザーIDを送信します。それはそれを行う正しい方法ですか?それはSPAです。私のブラウザにはconnect.sidのクッキーが作成されています。 useridがある場合、またはpost/getで、どのようにnodejsがセッションを認識するのですか?useridを抽出するにはどうすればよいですか?

私は読みましたが、これら二つのことが正確に何をすべきか理解していなかった。

passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 


passport.deserializeUser(function(id, done) { 
    User.findById(id, function(err, user) { 
     done(err, user); 
    }); 
}); 

多くの感謝を。

答えて

1

Facebookの認証メカニズム(oAuth)は非同期で、期待どおりに動作します。

あなたは$ http.get( "/ facebooklogin")をしません。むしろ、あなたは「/ facebooklogin」

にOAuthのプロセスは、一言で言えば動作方法を、あなたのブラウザをリダイレクトする必要があり

  1. ユーザーは 'にハードリダイレクトを行う必要がありますボタン「facebookでログイン」をクリックされhttp://youserver/facebooklogin '(あなたはiframe、ダイアログなどを使って派手なこともできます)
  2. サーバーサイドコールapp.get('/facebooklogin '、passport.authenticate(' facebook '));アプリケーションの資格情報を通過するfacebook.comへのリダイレクトで応答します。この段階で、ユーザーはアプリケーションを効果的に残しています。 Facebookはユーザーのログインを処理するので、ユーザー名やパスワードなどは見られません。
  3. 成功した場合、facebookはブラウザをコールバックURLにリダイレクトして、セッションIDを渡します。これはhttp://yourserver/facebook/callbackで受信されます。サーバサイドコードは、通常、これを何らかの方法でユーザセッションに格納します。 DB、クッキー、またはセッション情報を受け取ってローカルストレージに保存できるアプリケーション内のページにリダイレクトするだけです。
+0

意味があります。だから私はセッション情報を使用し、localStorageクッキーを作成する必要がありますか?しかし、それは単一ページアプリケーションなので、アプリ内の他のページはありません。 Angular Controllerは必要ないので、どこからローカルストレージにクッキーを保存しますか? – Somename

+0

/facebook/callback用のサーバーサイドハンドラは、クライアント側のアプリケーションを通常どおり(つまり、アプリケーションのルートにリダイレクトするか、ログインしたユーザーが終了すると予想される場所に)レンダリングしますが、facebookセッション情報何らかの形で(クッキーを設定し、URLにパラメータを追加するなど)。あなたの角度コードは、このクッキーまたはパラメータを検索し、それに応じて応答します(ローカルストレージに保存する、別のビューを表示するなど) – fluoresce

+0

これは美しく機能します。ありがとうマスター..弓を取る – Somename

関連する問題