2016-07-26 109 views
0

我正在構建一個使用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']) 

使用或者,也許我是正確的與我原來的嘗試線。

任何幫助表示讚賞:)

+0

更新:我剛纔想我原來的方法(基於模板的解決方案)與/註冊頁面,並得到了期望的行爲。事情仍然不適用於/登錄。越來越有可能,如果登錄的用戶訪問/登錄,他們將被註銷,然後顯示登錄頁面。不知道如何處理這個 –

回答

0

您可以創建一個包含decorator下面的代碼。如果他們嘗試訪問登錄頁面,它會將登錄的用戶重定向到另一個頁面。

if current_user.is_authencticated(): 
    return redirect (url_for('home')) 
+0

嘿,謝謝你的回答。這段代碼到哪裏去了?使用flask-stormpath,/ login和/ register的視圖函數在庫的內部。 –

+0

裏面的裝飾,讓我編輯。 – roy

+0

歡呼聲,感謝幫助 –

1

Heyo!

所以,我是Flask-Stormpath的作者,我以爲我會跳到這裏。與其試圖修改登錄/註冊行爲(我不建議這麼做,因爲我們定期使用庫發行版來更改這些內容),更好的解決方案是在用戶登錄後僅將這些URL隱藏起來。

許多網站都有一個頂級的導航欄,例如,最初在某處說「登錄」和「註冊」。但是,一旦你登錄了,這些按鈕就會變成其他的東西,通常是「儀表板」或類似的東西。

這樣,用戶無法進入/登錄或/註冊,除非他們專門輸入瀏覽器並嘗試手動去那裏。

我覺得這是理想的情況下,它可以完成使用模板條件邏輯:

{% if user %} 
... 
{% else %} 
... 
{% endif %} 
+0

嘿!我一直在這樣做 - 登錄用戶無法從我的應用程序中訪問/登錄或註冊。這是他們在我的問題中手動輸入/登錄地址欄的情況。對不起,我應該在我的問題中提到這一點! –

+0

偉大的圖書館btw –

相關問題