2

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

我在服务器上有会话管理,但我怎么知道我在我的骨干应用程序中处理的是哪个用户,我怎么知道他是否注销了这就是问题

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

我目前正在做的是,当我从服务器端设置的主页加载时呈现 html 隐藏字段#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()

这是主要的 ShowView

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') 
   @

上面的代码和设置是否有意义。如果我应该对上述内容进行任何更改,我正在寻求一般建议。

感谢您的宝贵意见

- 投标

4

2 回答 2

2

我们的应用程序是一个完全分离的客户端/服务器 API 架构,包括登录。

当用户通过我们的服务器进行身份验证和授权时,我们通过 HTTPS 连接发送带有相关数据的 JSON 请求(这意味着由于 CORS 和 IE,我们的后端和前端必须从同一个站点提供服务)。

后端返回一个身份验证令牌。

每个需要身份验证的 REST API 都需要将此令牌作为授权标头通过 HTTPS AJAX 请求发送。服务器设置为拒绝我们机制未提供的任何令牌,并拒绝来自我们服务器未提供的页面的任何连接。

我们将此身份验证令牌存储在客户端的 cookie 中。如果身份验证令牌无效、丢失等,我们的服务器会返回一个 HTTP 401,如果发生这种情况,我们会将其捕获并将客户端重定向到登录页面。

于 2012-06-18T15:33:06.407 回答
1

在开发客户端应用程序时,我也在努力解决身份验证问题。如果您曾经使用过第 3 方 API(Facebook、Twitter),您就会知道所有身份验证都是在服务器端完成的。这就是为什么@Pointy 是正确的。客户端没有进行身份验证。

因此,如果您希望访问 API 的安全部分,您​​的用户名和密码必须随每个请求一起发送,并在服务器上进行检查。这绝对不是最安全的方式,而且在没有 HTTPS 连接的情况下,几乎没有办法解决这个问题。我不确定你用什么语言开发你的 API,但这个链接仍然是一个很好的阅读。Steve 基本上使用了一个简单的协议,客户端通过该协议将授权令牌作为 HTTP 请求中的标头发送,服务器对该令牌进行解码以确定它是否有效。

在回答您的问题时,我会检查用户是否有效。如果他/她是,请使用身份验证令牌引导您的用户模型。此身份验证令牌将与每个需要身份验证的 api 请求一起发送和解码。我不是专家,所以如果有其他方法,请告诉我。我也在学习这个。

于 2012-06-18T15:24:08.207 回答