2016-09-29 5 views
0

私はYelp APIとMEANスタックを使用して会場検索アプリを作っています。 Passport JSを使用してFacebookにログインした後、あなたは会場に行くことを自分自身に追加したり削除したりすることができます。ノード/エクスプレスでパスポートJSログイン後にリフレッシュページと検索がありませんか?

ユーザーが検索を入力し、その結果がページ(認証されていないユーザー)に表示された場合は、ログインしてホームページにリダイレクトされ、検索結果が更新されます。

私が望むのは、ユーザーが再度検索する必要がないということです。したがって、基本的にページのリフレッシュは行われません。また、すべての会場データを保持するオブジェクトであるAngularの$ scope.venuesのリフレッシュもありません。

例えば

:私は、私はアムステルダムの

  • 検索結果がまだそこに
  • あるログインアムステルダム
  • 内のすべての会場のリストを取得アムステルダム
  • を検索

    • どうすればいいですか?

      これらは、ノード/ ExpressのパスポートJSのルートです:

      var passport = require('passport'); 
      
      var FacebookStrategy = require('passport-facebook').Strategy; 
      
      var session = require('express-session'); 
      
      passport.serializeUser(function(user, done) { 
      
      done(null, user); 
      
      }); 
      
      passport.deserializeUser(function(id, done) { 
      
      done(null, id); 
      
      }); 
      
      app.get('/auth/facebook', passport.authenticate('facebook')); 
      //Authenticate with Passport when hitting this route 
      
      app.get('/auth/facebook/callback', passport.authenticate('facebook', { 
      //Handle callback after successfully authenticated woth Facebook 
      
      successRedirect: '#/reload/' + searchQuery, 
      failureRedirect: '/error' 
      
      })); 
      

      これは私が角に持っているものです。

      angular.module("popperooApp", ['ngRoute']) 
          .config(function($routeProvider) { 
          $routeProvider 
           .when("/", { 
           templateUrl: "list.html", 
           controller: "ListController" 
           }).when("/reload/:query", { 
      
           templateUrl: "list.html", 
           controller: "ReloadController" 
      
          }) 
           .otherwise({ 
      
           redirectTo: "/" 
      
           }); 
          }) 
          .service("Venues", function($http) { 
      
          this.getVenues = function(location) { 
      
           var url = "search/" + location; 
      
           return $http.get(url); 
      
          }; 
      
      
          }) 
          .controller('ListController', function($scope, Venues) { 
      
          $scope.searchLocation = function(location) { 
      
           Venues.getVenues(location) 
           .then(function(response) { 
      
            $scope.venues = response.data; 
      
           }, function(response) { 
      
            alert("Error retrieving venues"); 
      
            console.log(response); 
      
           }); 
      
          }; 
      
          }) 
          .controller('ReloadController', function($scope,Venues,$routeParams){ 
      
           Venues.getVenues($routeParams.query) 
            .then(function(response){ 
      
             $scope.venues = response.data; 
      
            }, function(response){ 
      
             alert("Error retrieving venues"); 
      
             console.log(response); 
      
            }); 
      
      
      }) 
      

      私はMongoDBのデータベースにセッションを保存すべきか?私はAngularの '/'ルートにリダイレクトして何かをカスタムにしてはいけませんか?

      ありがとうございました!

  • 答えて

    0

    既に実装済みのような検索URLにリダイレクトする必要があります。セッションに情報を保存する必要はありません。

    あなたの場合の最善の方法は、現在ロードされているページにユーザーをリダイレクトすることだと思うので、検索にのみ適用されません。

    もちろん、このURLからアプリにアクセスでき、アプリは自動的にURLに基​​づいて検索結果を再読み込みすることを前提としています。

    幸運。

    +0

    ありがとうございました!新しいReloadControllerで$ routeParamsを使ってみましたが、次のエラーが出ます:FacebookTokenError:この認証コードが使用されました。何が問題なの? – chemook78

    関連する問題