更新 - 2013-07-31
所以,快速更新我所做的事情来解决这个问题。它将需要4件(仅限木偶/骨干,您仍然需要回复会话请求的Web服务)才能有效地工作。我创建了一个Gists供任何人查看。随意更新要点,我将提取代码,授予它没有错误。
我使用jQuery,require.js,text require.js插件,handlebars和moment.js。 main.js包括使用把手从磁盘或缓存加载模板的所有钩子,而不是在运行时将它们嵌入到HTML中,并提供帮助以在temlate中使用momentjs。如果您有任何疑问,请随时发布。
要点:https://gist.github.com/dkleehammer/6126639
更新!!
我相信我已经提出了一个有效的解决方案。我将继续测试,并将传递给创建者,看看他是否想要查看并将其添加到他的博客中。我已经看到了一些与骨干和身份验证相关的问题,希望这可以帮助其他人。
原始!!
我遇到了服务器端会话处理和骨干+木偶的问题。我有一个会话模型,我正在以此应用程序为基础。会话包含经过身份验证的标志,会话ID,用户ID等数据
我尝试过很多方法,但我仍遇到一个问题;我们正在等待服务器响应当前会话状态,并且路由器正在尝试决定是否需要将其发送到登录页面或在特定区域中查看。一旦经过身份验证(当然,在登录后)我就会被发送到索引#标签,但是如果我刷新页面的那一小部分,模型将返回undefined并返回到登录主题标签。对于在渲染过程中使用会话模型数据的任何其他内容,这都是一个问题。
使用牵线木偶进行服务器端会话应用的最佳方法是什么?有人有一个使用骨干+木偶的路由和服务器端会话的好例子吗?
答案 0 :(得分:1)
对于那些感兴趣的人,我根据我最近的工作,使用Backbone Marionette提出了一个服务器端会话应用程序的工作示例。
包含运行示例的说明的存储库:https://github.com/michael-lee/loopback-example-backbone-marionette
此示例后端使用LoopBackJS,它是具有身份验证支持的Node.js服务器,但是提供登录REST API并使用授权令牌保护数据访问的任何其他后端都可以。如果没有用户登录或令牌过期,则对后端的请求将因HTTP 401错误而失败。
Marionette应用程序存储在登录响应中返回的令牌,并在所有后续请求中发送此令牌。它使用 jquery.cookie 保留令牌,因此它会在页面重新加载和浏览器重新启动时保留。在应用程序启动之前,它首先检查它是否已有有效令牌。然后它启动应用程序和路由器。如果它有一个有效的令牌,它将直接进入经过身份验证的页面。经过身份验证后,在任何时间点,如果发生401错误(例如会话过期),应用程序会使用 $ .ajaxSetup 拦截错误,并将用户踢回登录页面。
答案 1 :(得分: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
}
});
答案 2 :(得分:0)
我会通过将会话数据(经过身份验证的标志,会话ID,用户ID等)打印到页面而不是执行额外的ajax查询来解决此问题。
window.userdata = {“username”:Marcus,“password”:'user_id':12343}'等。
在您的脚本中使用它之后删除它。