2

backbone.js アプリで現在ログインしているユーザーを追跡する方法を知りたいと思っていました。ページのほとんどのビューは、ユーザーがログインしているか、現在ログインしているか、どのユーザーがログインしているかを知る必要があります。最善の方法は何ですか?これを達成しますか?

サーバー上でセッション管理を行っていますが、バックボーン アプリでどのユーザーを扱っているかを知る方法と、そのユーザーがログアウトしたかどうかを知る方法は、それが問題です。

また、ユーザーが別のタブなどを使用してログアウトしたことをどのように知ることができますか? このようなものを処理するための一般的な方法が必要です。これは、以前にレールでフィルターを使用して管理していたようにです。フロントエンドで同じことを達成するために使用される方法。

私が現在行っていることは、ホームページが読み込まれるときに、サーバー側からレンダリングされた 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 要求を介して Authorization ヘッダーとしてこのトークンを送信する必要があります。サーバーは、メカニズムによって提供されていないトークンを拒否し、サーバーによって提供されていないページからの接続を拒否するように設定されています。

この認証トークンは、クライアント側の Cookie に保存されます。認証トークンが無効である、見つからないなどの場合、サーバーは HTTP 401 を返します。これをトラップし、クライアントをログイン ページにリダイレクトします。

于 2012-06-18T15:33:06.407 に答える
1

また、クライアント側のアプリを開発するときは、認証に頭を悩ませることにも苦労しました。サード パーティの API (Facebook、Twitter) を使用したことがある場合は、すべての認証がサーバー側で行われることをご存知でしょう。それが@Pointyが正しい理由です。クライアント側では認証は行われません。

したがって、API の安全な部分にアクセスする場合は、すべてのリクエストでユーザー名とパスワードを送信し、サーバーで確認する必要があります。これは間違いなく最も安全な方法ではなく、HTTPS 接続なしでこれを回避する方法はほとんどありません。API を開発している言語はわかりませんが、それでもこのリンクは非常に読みやすいものです。Steve は基本的に、クライアントが認証トークンを HTTP 要求のヘッダーとして送信し、サーバーがそのトークンをデコードして有効かどうかを判断する単純なプロトコルを使用します。

あなたの質問に答える際に、ユーザーが有効かどうかを確認します。そうである場合は、認証トークンを使用してユーザー モデルをブートストラップします。この認証トークンは、認証が必要な API リクエストごとに送信され、デコードされます。専門家ではないので、他に方法があれば教えてください。これもまた勉強中です。

于 2012-06-18T15:24:08.207 に答える