我正在使用Web服务后端为Django提供身份验证,并且get_user方法必须保留Web服务提供的cookie以便与会话关联。现在,我只是通过调用urllib2.urlopen(myTargetService)
来进行远程调用,但这并没有传递当前会话的cookie。
我创建了一个会话访问中间件来将会话存储在设置中:
class SessionAccessMiddleware:
def process_request(self, request):
settings.current_session = request.session
所以,我可以在get_request和post_request中访问请求会话,但我不知道如何让urllib2以特定于会话的方式记住我的cookie。
我该怎么做?
答案 0 :(得分:0)
此处:http://docs.python.org/library/cookielib.html#examples是您尝试使用urllib2
和cookielib
执行操作的示例。因此,根据您需要创建cookielib.CookieJar
的文档,使用正确的数据(来自会话)设置Cookie,构建使用opener
的{{1}}并使用它来获取CookieJar
。
如果您的中间件代码中的yourTargetService
意味着settings
,那么这不是个好主意。查看http://github.com/svetlyak40wt/django-globals/,您可以安全地存储请求范围的数据,以便从from django.conf import settings
对象无法访问的地方进行访问。此外,编写自定义身份验证后端并将其与request
一起使用可能是个好主意 - 而不是从头开始编辑您自己的身份验证系统 - 这将在此处介绍:http://docs.djangoproject.com/en/dev/topics/auth/#writing-an-authentication-backend。