2

我有一个使用 Stormpath ID 站点的 express-stormpath 应用程序。它有这样的配置:

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
      }
    }
  }
}));

登录工作正常,但注销给我带来了麻烦。

首先,我尝试使用内置的stormpath-sdk-angularjs endSession() 注销

$auth.endSession();

但是我还是登录了。

深入研究 express-stormpath,看起来logout POST 需要 Accept type text/html for id-site logout。在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 阻止策略:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问源“ http://localhost:9000 ”。

如何退出 Stormpath ID 站点?

4

2 回答 2

1

我在 Stormpath 工作。ID Site 要求您实际将最终用户重定向到 ID Site。我不确定为什么endSession()不起作用,但我会联系我们的 JS 团队,看看那里是否存在错误。

同时,您可以使用此代码(或 Angular 特定原语中的等效代码)来完成注销:

var form = document.createElement('form');
form.method = "POST";
form.action = "/logout";
form.submit();
于 2016-12-19T21:35:04.043 回答
0

这看起来像一个 CORS 问题。我相信您至少需要添加;

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

到服务器的响应标头。

于 2016-12-19T21:10:46.773 回答