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']