Python-social-auth登录后重定向到另一个域

问题描述:

登录python-social-auth后可能重定向到另一个网站吗?Python-social-auth登录后重定向到另一个域

让我们说:

<a href="{% url 'social:begin' 'facebook' %}?next={{ request.path }}"></a> 

上面的例子根据文档和它运作良好,但是当我试试这个:

<a href="{% url 'social:begin' 'facebook' %}?next=http://www.google.com/"></a> 

我收到以下错误:

http://example.com:8000/accounts/profile/ Not Found 

这是有道理的;我没有这个URL定义

在这一点上我已经被登录,但我看到一个错误页面。

但使用相同的配置,如果我重定向到我自己的网站,这工作,我认为这是一些有关的设置,但我不知道是哪一个。

编辑:

如果我删除在第一配置下next GET PARAM,它提升了同样的错误。

+0

您是否尝试在您的设置中设置“LOGIN_REDIRECT_URL”变量? – arcegk

+0

@arcegk是的,同样的问题。 – Gocht

重定向到不同的域是不安全的,例如, https://www.google.com。要理解为什么,想象,我送你的用户链接到:

http://www.yoursite.com/login?next=http://myevilsite.com 

如果你的登录页面信任next网址,那么用户会被重定向到我的网站,他们在登录后,我可以用这个网络钓鱼攻击。

为了防止出现这种情况,Django检查下一个url是否可以安全地重定向到。如果它不安全,那么它将重定向到settings.LOGIN_REDIRECT_URL,默认为/accounts/profile/。你可以see the code here

+0

我明白这一点,很高兴知道'accounts/profile'的来源,我没有在文档中找到。有什么方法可以捕捉重定向并避免它?或只响应一个JSON而不是模板? - 这不是一个完整的API,但我想知道是否有可能。谢谢 – Gocht

+0

[django登录视图]的文档(https://docs.djangoproject.com/en/1.9/topics/auth/default/#django.contrib.auth.views.login)确实表示用户将重定向到'LOGIN_REDIRECT_URL',默认为'/ accounts/profile /'。如果您想要避免404错误,请将设置更改为存在的url,或者为'/ accounts/profile /'添加视图和url模式。该URL /视图可能会返回HTML,JSON或其他任何你想要的。除非您使用ajax请求登录,否则返回json不是一个好主意。 – Alasdair