2012-06-17 35 views
2

我想知道如何跟蹤backbone.js應用程序中當前登錄的用戶,頁面上的大多數視圖都需要知道用戶已登錄或現在登錄哪個用戶。實現此目的的最佳方法是什麼?Backbone.js如何跟蹤登錄的用戶狀態和應用程序結構的一般建議

我有服務器上的會話管理,但我怎麼知道哪個用戶正在我在骨幹網的應用程序處理,我如何知道,如果他退出這就是問題

而且我怎麼知道用戶已經註銷使用另一個標籤等?應該有一種通用的方式來處理這些東西,就像我們在rails中使用過濾器來管理這些東西一樣。使用什麼方法在前端實現相同。

什麼我目前做的是,當我從服務器端設置的主頁加載HTML渲染的隱藏字段#current_user_id,其中我骨幹應用程序讀取和設置像follwoing

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() 

這裏的UPS其他子視圖中的主要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') 
    @ 

做了上述代碼和安裝程序是有道理的。我正在尋找一般性建議,如果我應該對上述做任何改變。

感謝您的寶貴意見

--Abid

+3

必須通過服務器端會話維護任何種類的安全「登錄」狀態。絕對沒有辦法在客戶端安全地做到這一點(即在瀏覽器中使用JavaScript)。 – Pointy

+0

是的,我知道我在服務器上有會話管理,但我怎麼知道我在我的主幹應用中處理的是哪個用戶,我怎麼知道他是否註銷了這個問題 – Abid

+1

Pointy是對的,你真的必須保護你的api服務器端。如果您使用會話管理/ cookie來完成此操作,那麼您應該能夠在客戶端讀取會話cookie,並且如果cookie不存在,那麼用戶不會登錄。 – Andy

回答

1

我還作戰開發客戶端應用程序包時,我的頭周圍的認證。如果你曾經使用第三方API(Facebook,Twitter),你就會知道所有的身份驗證都是在服務器端完成的。這就是爲什麼@Pointy是正確的。客戶端沒有進行身份驗證。

因此,如果您希望訪問API的安全部分,則必須隨每個請求一起發送用戶名和密碼,並在服務器上進行檢查。這絕對不是最安全的方式,並且在沒有HTTPS連接的情況下解決此問題的方法很少。我不確定你在開發API的語言是什麼,但是這個link是一個很好的閱讀。史蒂夫基本上使用一個簡單的協議,客戶端發送一個授權令牌作爲HTTP請求中的頭部,服務器解碼該令牌以決定它是否有效。

在回答你的問題時,我會檢查用戶是否有效。如果他/她正在使用身份驗證令牌引導您的用戶模型。這個認證令牌將被髮送並且用每個需要認證的api請求解碼。我不是專家,所以如果有其他方法,請告訴我。我還在學習這一點。

2

我們的應用程序是一個完全獨立的客戶端/服務器API架構,包括登錄。

當用戶通過我們的服務器進行身份驗證和授權時,我們通過HTTPS連接發送帶有相關數據的JSON請求(這意味着由於CORS & IE,我們的後端和我們的前端必須從同一站點)。

後端返回一個授權令牌。

每個需要身份驗證的REST API都需要通過HTTPS AJAX請求將此令牌作爲授權標頭髮送。服務器設置爲拒絕我們機制未提供的任何令牌,並拒絕來自我們服務器未提供的頁面的任何連接。

我們將此身份驗證令牌存儲在客戶端的cookie中。如果認證令牌無效,丟失等,我們的服務器返回一個HTTP 401,我們將其捕獲並重定向到登錄頁面,如果它發生。

相關問題