0

我正在尝试向我的 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_idresponse_typeredirect_uri,这会导致授权端点因缺少必需的参数而引发错误。

捕获初始 GET 参数、将它们传递给登录并将它们附加到重定向回身份验证端点的最佳方法是什么?

我考虑过使用会话或修改redirect_uri附加其他参数,但我仍然需要弄清楚如何通过这个过程捕获单个参数。如果可能的话,我不想修改登录代码。非常感谢任何想法/建议。谢谢!

4

1 回答 1

2

如果您使用的是 Django 的内置@login_required装饰器,我相信从 r2954 开始就会为您解决这个问题。

鉴于您不是,您只需要复制相同的步骤。只需设置next为完整路径的值(就像Django 在 中所做的那样@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()))

注意我还更改了您的代码以避免您的神奇宝贝异常处理(“必须抓住他们!”)。

于 2012-08-09T16:20:23.213 回答