2015-12-02 4 views
1

Аналогичный вопрос here (но не применимо).Угловой/Экспресс: перенаправление на последнюю страницу, посещенную после регистрации в

В моем 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'); 
}); 

Если они не вошли в систему, они» re перенаправлено на /login. Как только это будет успешно выполнено, я хотел бы вернуться к исходной странице, которую они пытались запросить.

Есть ли встроенный способ хранения маршрута, к которому пользователь пытается получить доступ, чтобы я мог перенаправить его после входа в систему? Я могу сделать это с помощью печенья, я полагаю, но он чувствует себя немного неуклюжим, чтобы сделать это ...

ответ

1

Вы можете использовать настраиваемый обратный вызов, как описано в паспорте documentation. С пользовательским обратным вызовом вы можете отправить текущую строку запроса на свой сервер и получить перенаправление к той же строке запроса после успешного входа в систему.

Другая возможность - использовать localStorage, чтобы сохранить текущее состояние и взять его после входа в систему. У вас есть много модулей для использования localStorage с угловыми, как angular-local-storage. не

+0

Отлично. Когда вы говорите, что я могу отправить запрос на свой сервер, как это будет достигнуто? Скорее не использовать «угловое-локальное хранилище»/любые дополнительные модули, если я могу помочь. – Jascination

+0

На основании документации PassportJs вы можете вернуть действие перенаправления своему угловому клиенту. Например: return res.redirect ('/ users /' + user.username). Я могу больше объяснить чат. – Ygalbel

+0

Извините, я спрашиваю, как сообщить Паспорту, какой изначально был запрошен Угловой маршрут (т. Е. Изнутри Углового). – Jascination

2

Там отсутствует встроенный в подходе к тому же с помощью обратного вызова, который PassportJS provides, но если вы пишете это для SPA, вы могли бы использовать $cacheFactory и создать сервис/завод, который хранит последний визит страницу этого пользователя.

Ограничения для $ cacheFactory - это то же самое, что и локальное хранилище, поскольку они являются специфичными для домена, поэтому, если вы меняете домены, локальное хранилище не будет одним и тем же кросс-доменом.