1

更新 - 2013-07-31

所以,快速更新一下我为实现这一目标所做的工作。它需要 4 件(仅限 Marionette/Backbone,您仍需要 Web 服务回复会话请求)才能有效工作。我创建了一个 Gists 供任何人查看。随时更新要点,我将提取代码,前提是它没有错误。

我使用 jQuery、require.js、文本 require.js 插件、车把和 moment.js。main.js 包含所有使用把手从磁盘或缓存加载模板的钩子,而不是在运行时将它们嵌入到 HTML 中,并提供一个帮助器来在模板中使用 momentjs。如果您有任何问题,请随时发布。

要点: https ://gist.github.com/dkleehammer/6126639

更新!!

我相信我已经想出了一个可行的解决方案。我会继续测试,并会传递给创建者,看看他是否要查看并添加到他的博客中。我已经看到了一堆与骨干网和身份验证相关的问题,希望这对其他人有所帮助。

原来的!!

我在服务器端会话处理和骨干+木偶方面遇到问题。我有一个基于此应用程序的会话模型。会话携带认证标志、会话ID、用户ID等数据。

我尝试了很多方法,但我仍然遇到了一个问题;一个瞬间的计时问题,我们在服务器上等待响应当前会话状态,路由器试图决定我们是否需要被发送到登录页面或在特定区域查看。一旦通过身份验证(当然是在登录之后),我就会被发送到索引标签,但是如果我刷新页面那一秒的时间,模型将返回未定义并返回到登录标签。这对于在渲染期间使用会话模型数据的任何其他事物来说都是一个问题。

用木偶做服务器端会话应用程序的最佳方法是什么?有人有使用骨干网+木偶的路由和服务器端会话的好例子吗?

4

3 回答 3

1

对于那些感兴趣的人,我根据我最近的工作提出了一个使用 Backbone Marionette 的服务器端会话应用程序的工作示例。

包含运行示例说明的存储库:https ://github.com/michael-lee/loopback-example-backbone-marionette

此示例后端使用 LoopBackJS,它是一个具有身份验证支持的 Node.js 服务器,但任何其他提供登录 REST API 并使用授权令牌保护数据访问的后端都可以。当没有用户登录或令牌过期时,对后端的请求会失败并出现 HTTP 401 错误。

Marionette 应用程序存储登录响应中返回的令牌,并在所有后续请求中发送此令牌。它使用jquery.cookie保留令牌,因此它在页面重新加载和浏览器重新启动时被保留。在应用程序启动之前,它首先检查它是否已经有一个有效的令牌。然后它启动应用程序和路由器。如果它确实有一个有效的令牌,它会直接进入经过身份验证的页面。经过身份验证后,在任何时间点,如果发生 401 错误(例如会话过期),应用程序会使用$.ajaxSetup拦截错误并将用户踢回登录页面。

于 2015-01-04T05:29:34.773 回答
0

借助 ajax jquery 函数和async : false选项,您可以向服务器发送同步请求:

$.ajax
  ({
    type: "GET",
    url: "login.php",
    dataType: 'json',
    async: false,
    data: '{"username": "' + username + '", "password" : "' + password + '"}',
    success: function (){
      // go wherever you want...
    },
    error: function(){
      // go to login page
    }
}); 
于 2012-08-08T21:57:38.563 回答
0

我将通过将会话数据(经过身份验证的标志、会话 ID、用户 ID 等)打印到页面而不是执行额外的 ajax 查询来解决这个问题。

window.userdata = {"username": Marcus, "password": 'user_id': 12343}' 等等。

并在脚本中使用后将其删除。

于 2012-11-15T02:38:39.597 回答