7

我正在尝试做的事情

我将要构建一个门户风格的应用程序,就像这篇 SO 帖子中描述的那样。我希望通过下面的模型序列最好地描述我正在寻找的行为: 登录 mainsite.com/ 登录后,用户可以访问 3 个独立的 Angular 应用程序 在任何给定的应用程序中,都可以访问用户的信用

总结一下我所追求的行为:

  1. 用户访问 mainsite.com/ 并被要求登录,一旦通过身份验证,就会显示三个指向三个不同应用程序的链接。

  2. 单击任何给定的应用程序(上面示例中的 mainsite.com/app1/)将对每个应用程序执行一个,但要记住用户已登录。如果可以嵌套 ngApps 但我不知道可以嵌套,这将起作用。

潜在的方法(我能想到的)

  1. 将身份验证逻辑和数据附加到 $window(有点像这篇文章)。页面刷新大概会杀死这个,它会涉及在页面中有 4 个应用程序(三个子应用程序和一个扮演主页面应用程序的角色。

  2. 删除一个带有相关会话信息的 cookie,每当一个人访问任何子应用程序以及它们之间的子应用程序时,该信息就会被拾取。我对此感到不安,但表现出一些承诺?

  3. 目前我没有第三个想法。

我想我正在寻找的是令人敬畏的http-auth-interceptor模块的扩展,但具有跨应用程序的持久性。

有没有人遇到过这个问题并解决了它,或者对如何解决它有任何其他想法?解决方案甚至可能会出现在我为使门户网站工作而想到的设计中,但我看不到它。

欢迎任何想法,非常感谢。

4

2 回答 2

0

让我们从错误的答案开始,但要坚持这个问题目前是如何解决的:通常,开发人员依赖于服务器端身份验证,考虑到与全客户端编程不同的应用程序和不同的问题。

现在,如果您只想在客户端执行此操作,它仍然是可行的,但您必须记住,未经身份验证的用户始终可以访问模板。这是一篇关于该主题的文章,它与github 存储库相关联。它不会支持多个应用程序,但通过调整此服务,您可以实现这一目标。正如您提到的,此解决方案使用 cookie。

这是一篇非常相关的博客文章,可以完成您的问题的答案:潜在的方法是什么。简而言之:使用令牌。

于 2014-02-27T12:56:16.710 回答
0

至于你的方法:

  1. 不是一个好主意。你已经解释了原因。
  2. 这可行,尽管您不能在 cookie 中存储太多(最多会话 ID 和登录名)

在我当前的项目中,我将用户数据(会话令牌、名称、ID、角色等)存储在 HTML5会话存储中。网络存储可从您在兼容 HTML5 的浏览器中运行的所有应用程序访问。

我使用 Witold Szczerba 的 HTTP Auth Interceptor Module for AngularJS ( http-auth-interceptor ) 和Restangular进行后端通信。在应用程序启动时,我检查是否有可用的身份验证数据。如果是这样,则将身份验证令牌传递给后续的 REST 调用。

/* Read authentication data from web storage */
var authData = this.getAuthData();
if (isDefined(authData)) {

      /* Make sure all subsequent REST calls are sent with auth token */
      Restangular.setDefaultHeaders(({auth:authData.token}));
} 
于 2014-02-27T14:54:05.220 回答