Django 的 request.user 为空

1 投票
2 回答
3575 浏览
提问于 2025-04-16 14:47

我在用Django做用户认证,用户是通过谷歌来登录的。首先,我获取初始的请求令牌,然后把用户重定向到谷歌进行认证。认证完成后,谷歌会把用户重定向回我的网站(使用我提供的重定向网址)。

在这个时候,request.user.idNonerequest.user.username 也是 None,这是为什么呢?我需要用户的ID来把谷歌发给我的访问令牌存入数据库。

在什么情况下,Django中的 request.user 对象会是空的呢?

更新1: 当我从谷歌重定向回来,网址是 http://mywebsite.com/lserv?s=goog 时,控制权回到了我的Django视图函数,但Django给我的 request.user 对象是匿名用户,没有用户名和ID。这是为什么呢?

更新2: 目前所有这些都在 python manage.py runserver 上运行...

更新3: 有没有人遇到过类似的情况?基本上,出于某种原因,request 中的 user 自动清空了,我被分配为 Anonymous 用户。所有这些都是在用户(从浏览器)发起的URL请求之间发生的。为什么会这样呢?

2 个回答

1

如果你在使用谷歌的oauth接口,要获取用户信息,你需要这样做:

from google.appengine.api import oauth

# ...
        try:
            # Get the db.User that represents the user on whose behalf the
            # consumer is making this request.
            user = oauth.get_current_user()

        except oauth.OAuthRequestError, e:
            # The request was not a valid OAuth request.
            # ...
1

Django的认证机制和谷歌或其他任何认证服务没有关系。如果你想把第三方的认证服务整合到你的Django网站里,你需要自己动手去做。

如果你在使用oauth2这个库,它的说明文档里有一部分叫做“用Twitter登录Django”,可能会对你有帮助。

撰写回答