Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Backbone.js如何跟踪登录用户状态以及应用程序结构的一般建议_Javascript_Backbone.js - Fatal编程技术网

Javascript Backbone.js如何跟踪登录用户状态以及应用程序结构的一般建议

Javascript Backbone.js如何跟踪登录用户状态以及应用程序结构的一般建议,javascript,backbone.js,Javascript,Backbone.js,我想知道如何在backbone.js应用程序中跟踪当前登录的用户,页面上的大多数视图都需要知道该用户是已登录还是现在登录,以及哪个用户已登录。实现这一目标的最佳方法是什么 我在服务器上有会话管理,但我如何知道我在主干应用程序中与哪个用户打交道,如何知道他是否已注销?这是个问题 另外,我如何知道用户已使用其他选项卡等注销?应该有一种通用的方法来处理这些东西,就像我们以前在rails中使用过滤器来管理这些东西一样。使用什么方法在前端实现相同的功能 我目前正在做的是,当加载主页时,我从服务器端设置了一

我想知道如何在backbone.js应用程序中跟踪当前登录的用户,页面上的大多数视图都需要知道该用户是已登录还是现在登录,以及哪个用户已登录。实现这一目标的最佳方法是什么

我在服务器上有会话管理,但我如何知道我在主干应用程序中与哪个用户打交道,如何知道他是否已注销?这是个问题

另外,我如何知道用户已使用其他选项卡等注销?应该有一种通用的方法来处理这些东西,就像我们以前在rails中使用过滤器来管理这些东西一样。使用什么方法在前端实现相同的功能

我目前正在做的是,当加载主页时,我从服务器端设置了一个隐藏字段#current_user_id,我的主干应用程序读取并设置如下变量

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()来获取该用户模型