Угловая маршрутизация и перенаправление узла

0

Я пытаюсь добавить аутентификацию SAML, используя паспорт-saml для моего приложения. Я использую Angular для маршрутизации. При загрузке главной страницы я проверяю пользователя через запрос GET на мой сервер узла "/auth", чтобы проверить req.user, если он верен, я отправляю обратно в пользовательские данные; если false, я отправляю сообщение об ошибке. У меня есть привязка данных к этому ответу данных пользователя, поэтому в случае отсутствия пользовательских данных я все же показываю кнопку "Вход".

При нажатии кнопки "Вход" я выполняю перенаправление на сервер узла "/login". Это делает функцию pass.authenticate, которая запускается, а затем связывается с "/assert", когда она завершается, чтобы выполнить перенаправление. ** Именно в этот момент у меня возникает проблема. ** Моя перенаправление всегда идет в "/", потому что Я выполняю перенаправление и используя угловую маршрутизацию, поэтому я не знаю, как сохранить этот маршрут, скажем "/myPage1" или "/myPage2". ПРИМЕЧАНИЕ. Я не хочу, чтобы вы всегда отправляли обратно в "/myPage1", я хочу иметь возможность "Вход" из любого вида в SPA.

Я иду об этом не так? Является ли это ограничением использования угловой маршрутизации?

угловатый

    $scope.login = function () {
        window.location.href = 'http://example.com/login';
    };

    function getCreds() {
        $http.get('http://example.com/auth', { withCredentials: true })
            .then(function (response) {
                $scope.creds = response.data;
            });
    }

Node.js

app.get('/login', passport.authenticate('saml', { failureRedirect: '/login' }));

app.post("/assert", passport.authenticate('saml', { failureRedirect: '/login' }), function (req, res) {
    // console.log('session' + JSON.stringify(req.session));
    // console.log("original url " + req.session.originalUrl);
    if (req.session.originalUrl) {
        res.redirect(req.session.originalUrl);
    }
    else {
        res.redirect('/');
    } 
});

app.get('/auth', function (req, res) {
    var authenticated = req.user;
    if (authenticated) {
        res.send(req.user);
    } else {
        res.send({statusCode: 401, message: 'User session is not alive'});
    }
});
Теги:
redirect
saml

1 ответ

0
Лучший ответ

Я нашел способ добиться желаемого эффекта.

Перед выполнением вызова "Вход" я делаю еще один вызов api в "/setSessionRedirectUrl", который передает текущий window.location.href с углового на узел сервера для хранения сеанса.

app.post('/setSessionRedirectUrl', function (req, res) {
    req.session.samlLoginRedirectUrl = req.body.redirectUrl;
    res.send();
});

Затем, когда функция assert запускается после входа в систему, она ищет перенаправление req.session.samlLoginRedirectUrl. Оно работает!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню