Как выйти с сайта Stormpath ID с помощью express-stormpath и stormpath-sdk-angularjs?

У меня есть приложение express-stormpath, которое использует Stormpath ID Site. У него есть такая конфигурация:

app.use(stormpath.init(app, {
  web: {
    idSite: {
      enabled: true,
      uri: '/idSiteResult',
      nextUri: '/'
    },
    login: {
      enabled: true,
      uri: config.login
    },
    logout: {
      enabled: true,
      uri: config.logout
    },
    me: {
      expand: {
        customData: true,
        groups: true
      }
    }
  }
}));

Логин работает нормально, но выход из системы доставляет мне проблемы.

Сначала я попытался выйти из системы с помощью встроенной функции endSession() stormpath-sdk-angularjs.

$auth.endSession();

Но я все еще вошел в систему.

Копаясь в express-stormpath, похоже, что для выхода из системы POST требуется тип Accept text/html для выхода из id-сайта. В stormpath-sdk-angularjs похоже, что endSession POST использует application / json.

Поэтому я попытался выйти с помощью $http.post

$http.post('/logout', null, {
  headers: {
    'Accept': 'text/html'
  }
});

Но я получаю эту ошибку:

XMLHttpRequest не может загрузить https://api.stormpath.com/sso/logout?jwtRequest=[...]. Перенаправление с " https://api.stormpath.com/sso/logout?jwtRequest=[...]" на " http://localhost:9000/idSiteResult?jwtResponse=[...]" было заблокировано CORS policy: в запрошенном ресурсе отсутствует заголовок "Access-Control-Allow-Origin". Источник ' http://localhost:9000/', следовательно, не имеет доступа.

Как выйти из сайта Stormpath ID?

2 ответа

Решение

Я работаю в Stormpath. Идентификационный сайт требует, чтобы вы фактически перенаправили конечного пользователя на идентификационный сайт. Я не уверен почему endSession() не работает, но я обращусь к нашей команде JS, чтобы узнать, не может ли быть там ошибка.

В то же время вы можете использовать этот код (или эквивалент в примитивах, специфичных для Angular) для выхода из системы:

var form = document.createElement('form');
form.method = "POST";
form.action = "/logout";
form.submit();

Это похоже на проблему CORS. Я считаю, что вы должны добавить хотя бы;

Access-Control-Allow-Origin: https://api.stormpath.com

На заголовки ответа с вашего сервера.

Другие вопросы по тегам