【问题标题】:How to check user is authenticated properly in Django and Backbone.js如何在 Django 和 Backbone.js 中检查用户是否经过正确身份验证
【发布时间】:2013-02-22 07:39:09
【问题描述】:

我想使用 Backbone.js 和 Django 构建单页应用程序。

用于检查用户是否通过身份验证,

我在django端写了一个get_identity方法。 如果 request.user.is_authenticated 为 true 则返回 request.user.id 否则返回 Http404

在主干方面,我定义了一个用户模型并定期对 get_identity 进行 ajax 调用。

我认为这是检查用户是否经过身份验证的最直接的方法。

为了学习单页应用,如果可能的话,我想把这个操作做的比这种方式更明智、更高效。

那么您对此有何建议?搜索 Django+Backbone.js + User Authentication 的时候,没找到满意的结果,不知道大家是怎么做这个简单的操作的。

任何帮助或想法将不胜感激。

(顺便说一下,我尝试定期读取 cookie,但客户端无法访问 HttpOnly True 标记的 cookie。)

Django 视图.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});
        }

【问题讨论】:

    标签: django authentication backbone.js


    【解决方案1】:

    我的 base.html 中有 var is_authenticated = {{request.user.is_authenticated}};

    并使用全局变量进行检查。

    我正在寻求更好的解决方案(因为当您开始缓存时这会中断)。
    但您可能会发现它很有用。

    【讨论】:

    • {{ request.user.is_authenticated }} 返回js无法理解的大写True或False。我不得不做var is_loggedin = '{{ request.user.is_authenticated }}' == 'True'? true : '';
    • 试试{{ request.user.is_authenticated|yesno:"true,false" }};
    • 这很好。谢谢。
    • 仍然返回字符串,最好做这样的事情; var isAuthenticated = '{{request.user.is_authenticated}}' === 'True'; 将返回 js 布尔值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2018-11-11
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多