在Node/Express中登录Passport JS后没有刷新页面和搜索

No refresh page and search after Passport JS login in Node/Express?

本文关键字:刷新 搜索 JS Node Express Passport 登录      更新时间:2023-09-26

我正在使用Yelp API和MEAN堆栈制作场地搜索应用程序。在使用Passport JS登录Facebook后,您可以添加或删除自己去某个地点。

如果用户输入搜索,结果显示在页面上(作为未经身份验证的用户),您登录并被重定向到主页,搜索结果刷新。

我想要的是用户不需要再次搜索。基本上不刷新页面或者不刷新$scope。在Angular中,它是一个保存所有场馆数据的对象。

例如:

  • 我搜索阿姆斯特丹
  • 我得到了阿姆斯特丹所有场地的列表
  • 我登录
  • 阿姆斯特丹的搜索结果还在

我该怎么做呢?

这些是Node/Express中的Passport 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中的内容:

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中重定向到"/"路由并自定义一些东西吗?

谢谢你的帮助!

您应该重定向到您已经实现的搜索URL,不需要在会话中存储信息。

我认为在你的情况下,最好的方法是将用户重定向到当前加载的页面,所以它不仅仅适用于搜索。

当然,假设你可以通过这个URL访问你的应用程序,并且应用程序会根据这个URL自动重新加载搜索结果。

好运。