【问题标题】: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]