Javascript Angular/Express:重定向到登录后访问的最后一页
类似的ish问题(但不适用) 在我的SPA中,我使用PassportJS来处理身份验证。我有许多需要用户登录的路由。我的路线是这样的:Javascript Angular/Express:重定向到登录后访问的最后一页,javascript,angularjs,node.js,express,angular-routing,Javascript,Angularjs,Node.js,Express,Angular Routing,类似的ish问题(但不适用) 在我的SPA中,我使用PassportJS来处理身份验证。我有许多需要用户登录的路由。我的路线是这样的: // ... other routing stuff when('/insights', { templateUrl: 'partials/insights', controller: 'insightsCtrl', resolve: { loggedin: checkLoggedin } }) var ch
// ... 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;
};
检查是否登录的我的路线:
app.get('/loggedin', function(req, res) {
res.send(req.isAuthenticated() ? req.user : '0');
});
如果他们没有登录,他们将被重定向到/login
。一旦成功完成,我想回到他们试图请求的原始页面
是否有内置的方法来存储用户试图访问的路由,以便在用户登录后我可以重定向到该路由?我想我可以用cookie来实现这一点,但这样做感觉有点笨拙…您可以使用自定义回调,如passportjs中所述。 通过自定义回调,您可以将当前查询字符串发送到服务器,并在成功登录后重定向到同一查询字符串 另一种可能是使用localStorage保存当前状态,并在登录后进行保存。 您有许多模块可以使用localStorage。
除了使用自定义回调之外,没有内置的方法,但是如果您是为SPA编写这篇文章,您可以利用
$cacheFactory
创建一个服务/工厂来存储该用户的最后访问页面
$cacheFactory的限制与本地存储相同,因为它们是特定于域的,因此如果您更改域,您的本地存储将不会是相同的跨域存储。太好了。当你说我可以向我的服务器发送查询时,这是如何实现的?如果可以的话,我宁愿不使用
angular local storage
/任何额外的模块。根据PassportJs文档,您可以向angular客户端返回重定向操作。如下所示:返回res.redirect('/users/'+user.username)。我可以在聊天中详细解释。对不起,我想问的是如何让Passport知道最初请求的角度路由(即,从角度路由内)。您可以将该路由作为参数作为查询字符串发送到express server。loggedin?当前=#我的路线#。你可以在服务器端的req.query.current.Ah访问它,愚蠢的我,忘了我可以像那样将参数传递给req
!太棒了,谢谢你。