我正在尝试为我的webapp添加身份验证。用户通过转到:
开始身份验证过程/authorization/v1/new?client_id=X&response_type=Y&redirect_uri=Z
如果request.user
不存在,我会使用以下代码重定向:
try:
user_identity = Identity.objects.get(user=request.user)
except:
resource = '%s?next=/authorization/v1/new' % settings.LOGIN_URL
return HttpResponseRedirect(resource)
这会将用户带到/login/?next=/authorization/v1/new
。
用户成功登录,并重定向回/authorization/v1/new
。
但是,现在我缺少必需的GET参数client_id
,response_type
和redirect_uri
,这会导致授权端点抛出错误缺少必要的参数。
捕获初始GET参数的最佳方法是什么,将它们传递给登录,并将它们附加到重定向回到auth端点?
我考虑过使用会话或修改redirect_uri
以附加其他参数,但我仍然需要弄清楚如何通过此过程捕获单个参数。如果可能的话,我不想修改登录代码。任何想法/建议非常感谢。谢谢!
答案 0 :(得分:1)
如果您使用的是Django内置的@login_required
装饰器,我相信这将为您as of r2954照顾。
鉴于你不是,你只需要复制相同的步骤。只需将next
设置为完整路径的值(如Django does in @login_required
),就像这样:
from urllib import quote
...
try:
user_identity = Identity.objects.get(user=request.user)
except Identity.DoesNotExist:
return HttpResponseRedirect('%snext=%s' % (settings.LOGIN_URL, quote(request.get_full_path()))
NB 我也改变了你的代码,以避免你的Pokémon exception handling(“抓住所有人!”)。