Angular/Express: перенаправление на последнюю страницу, посещенную после входа в систему
Подобный вопрос здесь (но не применимый).
В моем SPA я использую PassportJS для обработки аутентификации. У меня есть много маршрутов, которые требуют, чтобы пользователь вошел в систему. Я маршрутизирую так:
// ... 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
, Как только это будет успешно сделано, я бы хотел вернуться к исходной странице, которую они пытались запросить.
Существует ли встроенный способ хранения маршрута, к которому пользователь пытается получить доступ, чтобы я мог перенаправить его после входа в систему? Полагаю, я могу сделать это с печеньем, но это немного неуклюже...
2 ответа
Вы можете использовать пользовательский обратный вызов, как описано в документации по passportjs. С помощью пользовательского обратного вызова вы можете отправить текущую строку запроса на ваш сервер и получить перенаправление на ту же строку запроса после успешного входа в систему.
Другая возможность - использовать localStorage для сохранения текущего состояния и получения его после входа в систему. У вас есть много модулей, чтобы использовать localStorage с angular, как https://github.com/grevory/angular-local-storage.
Нет встроенного подхода, кроме использования пользовательского обратного вызова, который предоставляет PassportJS, но если вы пишете это для SPA, вы можете использовать $cacheFactory
и создайте сервис / фабрику, которая хранит страницу последнего посещения этого пользователя.
Ограничения для $ cacheFactory те же, что и для локального хранилища: они зависят от домена, поэтому при смене доменов локальное хранилище не будет таким же междоменным.