2016-03-02 76 views
1

登錄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

回答

1

重定向到不同的域是不安全的,例如, 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