Session 主干+;木偶+;RequireJS+;会话(身份验证)
更新-2013-07-31 所以,快速更新我为实现这一目标所做的工作。它需要4个部件(仅限于木偶/主干网,您仍然需要web服务来响应会话请求)才能有效工作。我创建了一个GIST供任何人查看。请随意更新GIST,我会提取代码,前提是它没有bug 我使用jQuery、require.js、text require.js插件、handlebar和moment.js。main.js包含所有钩子,用于使用Handlebar从磁盘或缓存加载模板,而不是在运行时将其嵌入HTML,并提供了在temlate中使用momentjs的助手。如果您有任何问题,请随时发布 GIST: 更新强> 我相信我已经想出了一个有效的解决办法。我将继续测试,并将传递给创建者,看看他是否想查看它并将其添加到他的博客中。我已经看到了许多与主干网和身份验证相关的问题,希望这能帮助其他人 原创强> 我在服务器端会话处理和主干网+木偶网方面遇到问题。我有一个会话模型,我基于这个应用程序。会话携带诸如认证标志、会话id、用户id等数据 我尝试了很多方法,但是我仍然遇到了一个问题;一个瞬间的计时问题,我们在服务器上等待当前会话状态的响应,而路由器正试图决定是否需要将我们发送到登录页面或在特定区域中查看。一旦经过身份验证(当然是在登录之后),我就会被发送到索引标签,但是如果我刷新页面,那么在几秒钟之内,模型就会返回为未定义,并返回到登录标签。对于渲染期间使用会话模型数据的任何其他对象,这都是一个问题Session 主干+;木偶+;RequireJS+;会话(身份验证),session,backbone.js,marionette,server-side,jquery-cookie,Session,Backbone.js,Marionette,Server Side,Jquery Cookie,更新-2013-07-31 所以,快速更新我为实现这一目标所做的工作。它需要4个部件(仅限于木偶/主干网,您仍然需要web服务来响应会话请求)才能有效工作。我创建了一个GIST供任何人查看。请随意更新GIST,我会提取代码,前提是它没有bug 我使用jQuery、require.js、text require.js插件、handlebar和moment.js。main.js包含所有钩子,用于使用Handlebar从磁盘或缓存加载模板,而不是在运行时将其嵌入HTML,并提供了在temlate中使用
使用木偶制作服务器端会话应用程序的最佳方法是什么?有人有使用主干网+木偶网的路由和服务器端会话的好例子吗?由于ajax jquery功能和异步: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
}
});
由于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
}
});
我将通过将会话数据(认证标志、会话id、用户id等)打印到页面而不是执行额外的ajax查询来解决这个问题 window.userdata={“username”:Marcus,“password”:“user\u id”:12343}等
然后在脚本中使用它后将其删除。我将通过将会话数据(已验证标志、会话id、用户id等)打印到页面而不是执行额外的ajax查询来解决这个问题 window.userdata={“username”:Marcus,“password”:“user\u id”:12343}等
在脚本中使用它之后,请将其删除。对于那些感兴趣的人,我根据我最近的工作,提出了一个使用主干木偶的服务器端会话应用程序的工作示例 存储库以及运行示例的说明: 此示例后端使用LoopBackJS,这是一个具有身份验证支持的Node.js服务器,但任何其他提供登录REST API并使用授权令牌保护数据访问的后端都可以。当没有用户登录或令牌过期时,对后端的请求将失败,并出现HTTP 401错误
木偶应用程序存储登录响应中返回的令牌,并在所有后续请求中发送该令牌。它使用jquery.cookie持久化令牌,因此它在页面重新加载和浏览器重新启动时被保留。在应用程序启动之前,它首先检查是否已经有有效的令牌。然后启动应用程序和路由器。如果它确实有一个有效的令牌,它将直接转到经过身份验证的页面。经过身份验证后,在任何时间点,如果发生401错误(例如会话过期),应用程序将使用$.ajaxSetup拦截错误,并将用户踢回登录页面。对于感兴趣的用户,基于我最近的工作,我提出了一个使用主干木偶的服务器端会话应用程序的工作示例 存储库以及运行示例的说明: 此示例后端使用LoopBackJS,这是一个具有身份验证支持的Node.js服务器,但任何其他提供登录REST API并使用授权令牌保护数据访问的后端都可以。当没有用户登录或令牌过期时,对后端的请求将失败,并出现HTTP 401错误
木偶应用程序存储登录响应中返回的令牌,并在所有后续请求中发送该令牌。它使用jquery.cookie持久化令牌,因此它在页面重新加载和浏览器重新启动时被保留。在应用程序启动之前,它首先检查是否已经有有效的令牌。然后启动应用程序和路由器。如果它确实有一个有效的令牌,它将直接转到经过身份验证的页面。经过身份验证后,在任何时间点,如果发生401错误(例如会话过期),应用程序将使用$.ajaxSetup截获错误,并将用户踢回登录页面。由于我使用默认的Backbone.sync,我将会话模型的fetch方法更改为fetch({async:false}),但这会导致更多问题。它的作用就像“change:logged_in”事件不再触发,或者布局在模型准备就绪之前已经请求渲染。感谢这个想法,我尝试了一些新的东西,看看是否可以使用会话模型的同步调用重写它。因为我使用的是default Backbone.sync,所以我将会话模型的fetch方法更改为fetch({async:false}),但这会导致更多问题。这就好像“change:logged_in”事件不再触发,或者布局已经重新启动