【问题标题】:Authentication mechanism with AngularJS (loading the user session)AngularJS 的身份验证机制(加载用户会话)
【发布时间】:2014-01-18 12:43:10
【问题描述】:

我使用 AngluarJS 已经 2 天了,现在我正在尝试构建我的身份验证系统。

我有几个控制器需要反映连接的用户凭据。比如:

<body>
  <div ng-controller="topController">
    <h1>{{User.name}}</h1>
  </div>
  <div ng-controller="contentController">
    <h1>{{User.age}}</h1>
  </div>
  <div ng-controller="bottomController">
    <h1>{{User.email}}</h1>
  </div>
</body>

因此,由于将用户加载到控制器中是不合适的,我想最好的方法是使用外部服务并将其返回到不同控制器的回调中。

但是通过这样做,我想知道我们如何(在哪里)在页面的第一次加载时加载会话(假设我只有一个视图来忽略路由器机制)? 我正在寻找一种“主要”点。

我正在使用 facebook 身份验证,所以我的问题不是关于如何使用 angular cookie,而是更多关于设置“全局逻辑”的问题。

如果有人能给我一个关于如何做到这一点的想法,或者给我一些关于思考身份验证机制的最佳方法的解释,那就太好了!

【问题讨论】:

  • @Chandermani 谢谢,我已经看过 brunoscopelliti 的博客,它专注于服务本身,而不是如何在应用程序上下文中使用它,我仍然不知道 阅读文章后如何在第一个加载页面上获取用户会话(我的意思是如何/在哪里调用服务)。

标签: angularjs


【解决方案1】:

您通常通过将初始化函数传递给主应用模块的run 方法来执行全局初始化代码,如下所示:

angular.module('myApp', [/* some dependencies */])
  .run(function(/* some dependencies */) {
    // Do anything you want to do after all modules load
    // but before your DOM/directives are processed by Angular.
  });

请看这里:http://code.angularjs.org/1.2.6/docs/api/angular.Module#methods_run

这似乎是一个做任何你想用 Facebook 做的事情的好地方。如果你的 Facebook 交互是异步的,那么你可能需要延迟你的主应用控制器(“topController”、“contentController”等)做他们的事情,直到你弄清楚会话发生了什么(因为它不会同步发生在这个run 函数中)。对此的一种解决方案可能是设置路由,以便在会话逻辑完成之前,您不会使用那些主应用程序控制器将其路由到视图。在 run 初始化函数中,当您的异步 FB 会话内容完成后(并且您已将会话信息存储在服务或其他东西中),您可以调用更改路由,以便加载主应用程序视图,并在那一点,无论您将会话存储在什么服务中,都应该使用您的 FB 会话进行设置。

【讨论】:

    猜你喜欢
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 2017-04-13
    • 1970-01-01
    • 2019-07-15
    • 2012-04-29
    • 1970-01-01
    相关资源
    最近更新 更多