我正在構建一個使用Stormpath和Flask-Stormpath進行身份驗證的Flask應用程序。我希望阻止登錄用戶訪問/ login或/ register頁面(因爲這沒有多大意義 - 登錄的用戶不需要登錄,並且如果您已經登錄,則根據定義進行註冊)。我試圖在我的自定義登錄頁面模板解決方案,做線沿線的東西:如何停止使用Flask-Stormpath訪問登錄/註冊頁面的用戶?
{% block page_heading %}
{% if user.given_name %}
Already Logged in as {{ user.given_name }}
{% else %}
Enter your credentials
{% endif %}
{% endblock page_subheading %}
如果用戶正在登錄,user.given_name將被定義和page_heading塊將採取「已經登錄在'消息中,否則'輸入您的憑據'消息(在未經身份驗證的用戶嘗試登錄的正常情況下)。我使用相同的結構來顯示登錄表單或更多錯誤文本。但是,此嘗試不起作用:就像user.given_name始終在登錄用戶訪問/登錄時恢復爲未定義一樣。這意味着,如果有人登錄,並且訪問/登錄他們然後登出 - 這將解釋我的解決方案嘗試失敗。
鑑於上述情況和查閱文檔後,我可能會使用is_authenticated();不過,不是通過Flask-Stormpath,而是通過底層的Flask-Login模塊,因爲Flask-Stormpath總是設置這個返回True,每個文檔,但我不知道如何去做這件事。
此外,我的方法是hacky - 我覺得更好的解決方案將駐留在應用程序的Python端。
所以我的問題是這樣的:什麼是最明智的方式來檢測用戶登錄並給予此,防止他們訪問,或從/登錄和/註冊頁面重定向他們?也許有一個神奇的裝飾的地方,就是對面來
@login_required
或內置的「未經授權」組stormpath,我可以在
@groups_required(['unauthorised'])
使用或者,也許我是正確的與我原來的嘗試線。
任何幫助表示讚賞:)
更新:我剛纔想我原來的方法(基於模板的解決方案)與/註冊頁面,並得到了期望的行爲。事情仍然不適用於/登錄。越來越有可能,如果登錄的用戶訪問/登錄,他們將被註銷,然後顯示登錄頁面。不知道如何處理這個 –