1

我正在使用来自 django 的默认模型用户(因为我使用的是 django-facebook)并且用户身份验证在模板中不起作用。这是代码:

{% if request.user.is_authenticated %}
   Welcome, {{ request.user.first_name }}
   <a href="/logout">logout</a>
{% else %}
   <form action="{% url facebook_connect %}?facebook_login=1" method="post">
        <a href="javascript:void(0);" style="font-size: 20px;" onclick="F.connect(this.parentNode);">
             <img src="/media/images/site/facebook_login.png" alt="facebook_login" class="facebook_login_button"/>
        </a>
        <input type="hidden" value="{{ request.path }}" name="next" />
   </form>
{% endif %}

我已经从视图中传递了 context_instance:

return render_to_response('index.html', context, context_instance=RequestContext(request))

但它仍然行不通。谢谢你的帮助!

编辑:

用户使用 django-facebook 成功登录(插入到 auth_user 表中)并显示了他的数据,但是当用户注销时,他的数据消失了,并且在上面编辑的代码中看到的登录表单没有显示!

这是我用于登录和注销用户的完整视图:

def logout_view(request):
    logout(request)
    return HttpResponseRedirect('/')

def signin(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            return HttpResponseRedirect('/')
        else:
            # TO RETURN ERROR
            return HttpResponseRedirect('/')
    else:
        # TO RETURN ERROR
        return HttpResponseRedirect('/')

如果我从 request.user.first_name 中删除请求,则会出现错误:

您需要在项目设置中设置 AUTH_PROFILE_MODULE

这就是我能得到的所有细节..

4

2 回答 2

6

我不知道为什么request.user.is_authenticated不起作用,但我找到了解决方案 - 使用

{% if not user.is_anonymous %}

代替

{% if request.user.is_authenticated %}

似乎可以解决问题。如果有效并且仅显示登录用户的信息和注销按钮。

于 2012-10-11T01:40:57.140 回答
1

is_authenticated() 是一个函数调用,而不是可以像您在模板代码中那样使用的属性

于 2013-04-12T10:58:09.273 回答