【问题标题】:django social_auth passing extra argumentsdjango social_auth 传递额外的参数
【发布时间】:2012-12-25 19:44:48
【问题描述】:

所以我有一个推荐网址,例如http://.../ref/4Q3j9/,点击后会将他们带到注册页面。他们可以使用谷歌帐户 [Oauth2] 进行注册。我将它们作为隐藏变量存储在模板中。但是当用户点击谷歌登录时,我会丢失这些值。无论如何我可以传递这些参数,然后在 social_auth 中的重定向上再次返回。我想过使用管道,但那只是在登录过程之后,到那时我失去了那些参数。

【问题讨论】:

标签: django authentication django-socialauth


【解决方案1】:

这有点棘手,存储在会话中是不够的,因为 django 在用户登录时清除会话。当用户被发送到您的注册页面时,您可以将其存储在会话中,但是您需要一个管道执行类似user.referral = request.session['referral'] 的条目,然后使用中间件将其存储回会话中,该中间件在 django-social-auth 完成的重定向发送给用户之前检查request.user.referral(当身份验证完成并且用户是登录)。

您可以尝试定义 GOOGLE_OAUTH2_AUTH_EXTRA_ARGUMNTS = {'referral': None} 并确保 Google OAuth2 链接添加了 ?referral=foobar。但这只会避免推荐的第一个会话存储,您将需要管道(但这次检查request.GET['referral']而不是会话)条目和中间件,我不确定谷歌会在授权时返回推荐完成了。

【讨论】:

    【解决方案2】:

    一个老问题,但由于它没有答案...我使用 cookie 做到了这一点,在视图函数中设置了一个 cookie

    response.set_cookie( cookie_name, my_needed_value, max_age=3600)
    

    或在网页中使用

    document.cookie = 'cookie_name=my_needed_value; expires=Tue, 05 Nov 2014 00:00:00 UTC; path=/'
    

    (设置过期,或者删除到过去的日期)然后在视图中读取它

    if request.COOKIES.has_key(cookie_name):
            my_needed_value = request.COOKIES[cookie_name]
    

    【讨论】:

      猜你喜欢
      • 2014-09-08
      • 1970-01-01
      • 2019-03-02
      • 2018-10-29
      • 2018-01-15
      • 2012-06-01
      • 1970-01-01
      • 2017-06-01
      • 2017-12-18
      相关资源
      最近更新 更多