我正在使用python social auth来使用社交登录,但在成功登录后我无法重定向到最后一页。
例如,如果我在以下页面http://localhost:8000/docprofile/14/
并单击登录按钮,而不是将我重定向到最后一页http://localhost:8000/docprofile/14/
,则会将我重定向到登录页面。
如果我这样说:
<a href="{% url 'social:begin' 'facebook' %}?next={{ request.path }}"> | Login with Facebook</a>
重定向到登录页面,网址以奇怪的字符结尾:
http://localhost:8000/login/#_=_
我也试过这个:
<a href="{% url 'social:begin' 'facebook' %}?next={{ request.get_full_path }}"> | Login with Facebook</a>
这一次它确实采用了/docprofile/14
的路径,但仍然没有将我重新定向,并带我进入带有网址http://localhost:8000/login/?next=/docprofile/14/#_=_
的登录页面
答案 0 :(得分:1)
我要做的是从我的GET中的查询字符串中删除下一个参数,并修改html以将其包含在模板中,如下所示
def home(request):
c = context()
if request.GET.get('next'):
c = context(next=request.GET['next'])
return render_to_response('home.html',
context_instance=RequestContext(request, c))
def context(**extra):
return dict({
'available_backends': load_backends(settings.AUTHENTICATION_BACKENDS)
}, **extra)
我的模板现在从上下文中获取下一个参数,当我登录重定向时工作。
<a class="col-md-2 btn btn-default" name="{{ backend|backend_class }}" href="{% url "social:begin" backend=name %}?next={{next}}">
答案 1 :(得分:0)
您可以将其包含在重定向页面模板的头部 -
<script type="text/javascript">
if (window.location.hash == '#_=_') {
window.location.hash = '';
}
</script>`
它会起作用!
答案 2 :(得分:0)
解决方案:
<a class="fb-login-placeholder" href="{% url 'social:begin' 'facebook' %}?next={{ request.GET.next }}">| Login with Facebook</a>
即需要request.path
来代替request.GET.next
。
确实,要摆脱这些有趣的角色,请使用@AshishGupta的答案。