【问题标题】:Django user authentication not workingDjango用户身份验证不起作用
【发布时间】:2012-10-10 22:31:31
【问题描述】:

我正在使用来自 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

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

【问题讨论】:

  • 你的问题太模糊了。是否返回错误?您的用户是否已登录但未显示欢迎消息?究竟是什么不起作用...?
  • 所以你是说模板总是最终呈现“欢迎,”?
  • 一开始用户登录时会说他的名字,但当他退出时它保持空白。

标签: django authentication


【解决方案1】:

我不知道request.user.is_authenticated 不起作用的原因,但我找到了解决方案 - 使用

{% if not user.is_anonymous %}

而不是

{% if request.user.is_authenticated %}

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

【讨论】:

  • 你知道为什么吗?我得到了相同的结果 - 这对我来说非常有用,但我不知道为什么前者不起作用。
  • 抱歉,Christopher,我在发布此内容后不久就离开了该项目,并且没有时间弄清楚为什么它不能正常工作。
  • 我认为可能发生的情况是用户对象实际上并没有在上下文中定义,所以 user.is_anonymous 返回 false 因为对象不在范围内 - 因此 if not 返回 true 并且分支被执行。如果我是对的,这实际上可能是一个很滑的斜坡。但我不确定! @ChristopherArmstrong,你怎么看?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-12-25
    • 2013-12-02
    • 2017-07-14
    • 2016-10-17
    • 2015-10-12
    • 2015-07-13
    • 2011-08-30
    • 2013-11-03
    • 2017-06-02
    相关资源
    最近更新 更多