Javascript Backbone.js如何跟踪登录用户状态以及应用程序结构的一般建议
我想知道如何在backbone.js应用程序中跟踪当前登录的用户,页面上的大多数视图都需要知道该用户是已登录还是现在登录,以及哪个用户已登录。实现这一目标的最佳方法是什么 我在服务器上有会话管理,但我如何知道我在主干应用程序中与哪个用户打交道,如何知道他是否已注销?这是个问题 另外,我如何知道用户已使用其他选项卡等注销?应该有一种通用的方法来处理这些东西,就像我们以前在rails中使用过滤器来管理这些东西一样。使用什么方法在前端实现相同的功能 我目前正在做的是,当加载主页时,我从服务器端设置了一个隐藏字段#current_user_id,我的主干应用程序读取并设置如下变量Javascript Backbone.js如何跟踪登录用户状态以及应用程序结构的一般建议,javascript,backbone.js,Javascript,Backbone.js,我想知道如何在backbone.js应用程序中跟踪当前登录的用户,页面上的大多数视图都需要知道该用户是已登录还是现在登录,以及哪个用户已登录。实现这一目标的最佳方法是什么 我在服务器上有会话管理,但我如何知道我在主干应用程序中与哪个用户打交道,如何知道他是否已注销?这是个问题 另外,我如何知道用户已使用其他选项卡等注销?应该有一种通用的方法来处理这些东西,就像我们以前在rails中使用过滤器来管理这些东西一样。使用什么方法在前端实现相同的功能 我目前正在做的是,当加载主页时,我从服务器端设置了一
window.MyApp =
Models: {}
Collections: {}
Views: {}
Routers: {}
currentUser: null
init: ->
@currentBusiness = $('#current_business').val()
new MyApp.Routers.Businesses
Backbone.history.start()
$(document).ready ->
MyApp.init()
然后我的路由器设置一个ShowView,然后在页面上设置其他子视图
class MyApp.Routers.AppRouter extends Backbone.Router
routes:
'': 'show'
show: ->
user = new Vocallocal.Models.user id: Vocallocal.currentBusiness
Vocallocal.currentBusiness = business
new Vocallocal.Views.BusinessesIndex model: business
business.fetch()
这是主视图
class MyApp.Views.ShowView extends Backbone.View
el: '#main'
template: JST['users/home']
initialize: ->
@model.bind 'change', @render, @
@details = new Vocallocal.Views.UserDetails model: @model
@logo = new Vocallocal.Views.UserLogo model: @model
@managePhotos = new Vocallocal.Views.ManagePhotos model: @model
render: ->
console.log('change has occured')
@
上述代码和设置是否合理。如果我需要对上述内容进行任何更改,我将寻求一般建议
感谢您的宝贵意见
--Abid在开发客户端应用程序时,我也在绞尽脑汁进行身份验证。如果您曾经使用过第三方API(Facebook、Twitter),您将知道所有身份验证都是在服务器端完成的。这就是为什么@Pointy是正确的。客户端不进行身份验证 因此,如果您希望访问API的安全部分,则必须在每次请求时发送用户名和密码,并在服务器上进行检查。这肯定不是最安全的方法,没有HTTPS连接的情况下,很少有方法可以解决这个问题。我不确定您正在用什么语言开发API,但这仍然是一本非常好的读物。Steve基本上使用了一个简单的协议,客户机在HTTP请求中发送一个授权令牌作为头,服务器解码该令牌以决定它是否有效
在回答您的问题时,我会检查用户是否有效。如果他/她是,则使用身份验证令牌引导您的用户模型。此身份验证令牌将随每个需要身份验证的api请求一起发送和解码。我不是专家,所以如果有其他方法,请告诉我。我也在学习这一点 我们的应用程序是一个完全分离的客户端/服务器API体系结构,包括登录 当用户使用我们的服务器进行身份验证和授权时,我们会通过HTTPS连接发送一个JSON请求,其中包含相关数据(这意味着由于CORS&IE,我们的后端和前端必须从同一站点提供服务) 后端返回一个身份验证令牌 RESTAPI所需的每个身份验证都要求将此令牌作为HTTPS AJAX请求上的授权头发送。服务器被设置为拒绝任何未由我们的机制提供的令牌,并拒绝来自我们的服务器未提供服务的页面的任何连接
我们将此身份验证令牌存储在客户端的cookie中。如果身份验证令牌无效、丢失等,我们的服务器将返回一个HTTP 401,如果出现,我们将捕获该HTTP 401并将客户端重定向到登录页面。必须通过服务器端会话维护任何类型的安全“登录”状态。在客户端(即浏览器中的JavaScript)绝对没有安全的方法。是的,我知道我在服务器上有会话管理,但我如何知道我在主干应用程序中与哪个用户打交道,以及我如何知道他是否已注销?这是问题点是对的,你真的必须保护你的api服务器端。如果您使用会话管理/cookie进行此操作,则您应该能够在客户端读取会话cookie,如果cookie不存在,则用户未登录。您不能将用户信息作为数据模型的一部分吗?@Pointy yes这是我当前正在做的,用户信息是用户模型的一部分,我最初通过设置隐藏变量的id并执行model.fetch()来获取该用户模型