【发布时间】:2016-12-22 17:34:14
【问题描述】:
我的社交验证管道如下:
SOCIAL_AUTH_PIPELINE = (
'social.pipeline.social_auth.social_details',
'social.pipeline.social_auth.social_uid',
'social.pipeline.social_auth.auth_allowed',
'social.pipeline.social_auth.social_user',
'social.pipeline.user.get_username',
'social.pipeline.social_auth.associate_by_email',
'social.pipeline.user.create_user',
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details',
'useraccounts.models.create_user_profile'
)
当 'useraccounts.models.create_user_profile' 执行以下操作时:
request = kwargs.get('request')
do_something(session_key=request.session.session_key)
以下错误来了:
'QueryDict' object has no attribute 'session'
'Request' 字典具有以下键的元素:state、code、prompt、session_state、authuser
我使用的是 Django 版本 1.5.5。问题来了,因为我已将 python-social-auth 从 v0.1.17 升级到 v0.2.4
【问题讨论】:
-
request = kwargs.get('request')不是QuerySet,它是QueryDict。你可以这样使用:request['session']['session_key']. -
请求没有任何名为会话的密钥,因此更改访问方法没有任何好处。虽然我尝试并得到错误: MultiValueDictKeyError: "Key 'session' not found in
-
打印请求结果。
-
请求:
-
我注释掉了上面访问 request.session 的行,后来代码中断说 request.user 不存在。请求和用户都是由中间件设置的,但我再次检查并在设置中提到了它们。这可能有助于隔离问题