Python-social-auth 登录后重定向到另一个域
Redirect to another domain after Python-social-auth login
使用 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 参数,它会引发相同的错误。
重定向到其他域是不安全的,例如https://www.google.com
。要理解原因,假设我将 link 发送给您的用户:
http://www.yoursite.com/login?next=http://myevilsite.com
如果您的登录页面信任 next
url,那么您的用户在登录后将被重定向到我的网站。我可以用它来进行网络钓鱼攻击。
为了防止这种情况发生,Django 会检查下一个 url 是否可以安全地重定向到。如果它不安全,那么它将重定向到 settings.LOGIN_REDIRECT_URL
,默认为 /accounts/profile/
。你可以 see the code here.
我遇到了同样的问题,我认为在某些情况下重定向到另一个域很有趣(即:您的后端与前端位于不同的域下)。
经过一些调查,我发现您可以控制可以安全重定向到哪些域 (https://github.com/python-social-auth/social-core/blob/1d809941ab8a99af9e1bdf12bae548202c94eaa2/social_core/actions.py#L20)。
只需将此添加到您的 settings.py
:
SOCIAL_AUTH_ALLOWED_REDIRECT_HOSTS = ['domain1', 'domain2']
使用 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 参数,它会引发相同的错误。
重定向到其他域是不安全的,例如https://www.google.com
。要理解原因,假设我将 link 发送给您的用户:
http://www.yoursite.com/login?next=http://myevilsite.com
如果您的登录页面信任 next
url,那么您的用户在登录后将被重定向到我的网站。我可以用它来进行网络钓鱼攻击。
为了防止这种情况发生,Django 会检查下一个 url 是否可以安全地重定向到。如果它不安全,那么它将重定向到 settings.LOGIN_REDIRECT_URL
,默认为 /accounts/profile/
。你可以 see the code here.
我遇到了同样的问题,我认为在某些情况下重定向到另一个域很有趣(即:您的后端与前端位于不同的域下)。
经过一些调查,我发现您可以控制可以安全重定向到哪些域 (https://github.com/python-social-auth/social-core/blob/1d809941ab8a99af9e1bdf12bae548202c94eaa2/social_core/actions.py#L20)。
只需将此添加到您的 settings.py
:
SOCIAL_AUTH_ALLOWED_REDIRECT_HOSTS = ['domain1', 'domain2']