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,它提升了同样的错误。
重定向到不同的域是不安全的,例如, 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。
我明白这一点,很高兴知道'accounts/profile'的来源,我没有在文档中找到。有什么方法可以捕捉重定向并避免它?或只响应一个JSON而不是模板? - 这不是一个完整的API,但我想知道是否有可能。谢谢 – Gocht
[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
您是否尝试在您的设置中设置“LOGIN_REDIRECT_URL”变量? – arcegk
@arcegk是的,同样的问题。 – Gocht