AngularJS验证一次以使用多个应用程序

时间:2013-07-17 07:04:19

标签: angularjs

我正在尝试做什么

我即将构建门户风格的应用程序,就像this SO post中描述的那样。 我正在寻找的行为我希望最好通过下面的模型序列来描述: Login at mainsite.com/ Once logged in, user has access to 3 separate Angular apps From within any given app, the user's creds are accessible

总结我所追求的行为:

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

  2. 点击任何给定的应用程序(上面示例中的mainsite.com/app1/)将为每个应用程序选择一个,但记住用户已登录。如果可以嵌套ngApps,这将有效但我不知道知道一个人可以。

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

    1. 将身份验证逻辑和数据附加到$ window(类似于this post)。页面刷新可能会导致这种情况失败,它将涉及在页面中有4个应用程序(三个子应用程序和一个扮演主页面应用程序的角色。

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

    3. 此时此刻我没有第三个想法。

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

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

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

2 个答案:

答案 0 :(得分:0)

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

现在,如果您只想在客户端进行此操作,它仍然可行,但您必须记住,未经过身份验证的用户始终可以访问模板。以下是关于主题的an article,并且与github repository相关联。它不会支持多个应用程序,但通过调整this service,您可以实现这一目标。此解决方案使用您提到的cookie。

这是一个very relevant blog article,可以完成您的问题的答案:有哪些潜在的方法。简而言之:使用令牌。

答案 1 :(得分:0)

关于你的方法:

  1. 不是个好主意。你已经解释了原因。
  2. 虽然你这样,但这都有效 不能在cookie中存储太多(会话ID和登录名最多)
  3. 在我当前的项目中,我将用户数据(会话令牌,名称,ID,角色等)存储在HTML5 session storage中。您可以从HTML5兼容浏览器中运行的所有应用访问网络存储。

    我使用Witold Szczerba的AngularJS(http-auth-interceptor)和Restangular的HTTP Auth拦截器模块进行后端通信。在应用程序启动时,我检查是否有可用的身份验证数据。如果是,则将身份验证令牌传递给后续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}));
    }