Angular / Express:redirect到login后访问的最后一页

这里有一个类似的问题(但不适用)。

在我的SPA中,我使用PassportJS来处理authentication。 我有许多路线,需要用户login。我的路线是这样的:

// ... other routing stuff when('/insights', { templateUrl: 'partials/insights', controller: 'insightsCtrl', resolve: { loggedin: checkLoggedin } }) var checkLoggedin = function($q, $timeout, $http, $location, $rootScope){ var deferred = $q.defer(); $http.get('/loggedin').success(function(user){ if (user !== '0') { $rootScope.user = user; deferred.resolve(); } else { deferred.reject(); $location.url('/login'); } }); return deferred.promise; }; 

我的路线检查是否login:

 app.get('/loggedin', function(req, res) { res.send(req.isAuthenticated() ? req.user : '0'); }); 

如果他们没有login,他们被redirect到/login 。 一旦成功完成,我想回到他们试图请求的原始页面。

有没有内置的方式来存储用户试图访问的路由,以便我们可以redirect到一旦他们login? 我可以用cookies做这个,但是这样做感觉有点笨拙。

       

网上收集的解决方案 "Angular / Express:redirect到login后访问的最后一页"

您可以使用自定义callback,如passportjs 文档中所述 。 通过自定义callback,您可以将当前的查询string发送到您的服务器,并成功login后redirect到相同的查询string。

另一种可能是使用localStorage来保存当前状态并在login后进行。 你有很多模块使用localStorage和angular-local-storage这样的angular 。

除了使用PassportJS提供的自定义callback之外,没有内置方法,但是如果您正在为SPA编写此代码,则可以利用$cacheFactory并创build一个存储该用户的上次访问页的服务/工厂。

$ cacheFactory的限制与本地存储是一样的,因为它们是域特定的,所以如果你改变了域,你的本地存储将不会是相同的跨域。