2013-03-07 41 views
1

我想使用Backbone.js和Django構建單頁應用程序。如何檢查用戶在Django和Backbone.js中正確驗證

爲了檢查用戶被認證或沒有,

我寫在Django側的方法GET_IDENTITY方法。 如果request.user.is_authenticated爲true,則返回request.user.id,否則返回Http404

在骨幹方面,我定義了一個User模型並定期對get_identity進行ajax調用。

我認爲這是檢查用戶的最直接的方式進行身份驗證或沒有。

對於學習單頁面應用程序,如果可能的話,我希望這種操作比這種方式更明智更高效。

那麼你對此有何建議?當我搜索Django + Backbone.js +用戶認證時,我找不到任何令人滿意的結果,我真的很想知道人們如何做這個簡單的操作。

任何幫助或想法將不勝感激。

(順便我想定期讀取Cookie,但真正的HttpOnly標記Cookie不以客戶端reacheable。)

的Django的views.py

def get_identity(request): 
    if not request.user.is_authenticated(): 
     raise Http404 
    return HttpResponse(json.dumps({'identity':request.user.id}), mimetype="application/json") 

Backbone.js的一面。

updateUser:function(){ 
      var $self=this; 
      $.ajaxSetup({async:false}); 
      $.get(
       '/get_identity', 
       function(response){ 
        // update model... 
        $self.user.id =response.identity; 
        //check user every five minutes... 
        $self.user.fetch({success: function() { 
         $self.user.set('is_authenticated',true); 
         setTimeout($self.updateUser, 1000*60*1); 
         } 
        },this); 
       }).fail(function(){ 
        //clear model 
        $self.user.clear().set($self.user.defaults); 
        setTimeout($self.updateUser, 1000*60*1); 
       }); 
      $.ajaxSetup({async:true}); 
     } 

回答

3

我在base.html文件

var is_authenticated = {{request.user.is_authenticated}};和使用全局變量來檢查。

我在追求更好的解決方案(因爲這打破,當你開始緩存)。
但你可能會覺得它很有用。

+0

''{{request.user.is_authenticated}}'''返回js無法理解的大寫True或False。我必須做'''var is_loggedin ='{{request.user.is_authenticated}}'=='True'? true:'';''' – chhantyal 2015-10-05 12:38:03

+1

嘗試'{{request.user.is_authenticated | yesno:「true,false」}};' – eugene 2015-10-05 12:42:55

+0

這很整齊。謝謝。 – chhantyal 2015-10-05 12:47:30