2016-07-26 8 views
0

나는 Stormpath와 Flask-Stormpath를 인증 용으로 사용하는 Flask 앱을 ​​만들고 있습니다. 로그인 한 사용자가/login 또는/register 페이지에 액세스하지 못하도록하고 싶습니다. (로그인 한 사용자가 로그인 할 필요가 없으며 이미 로그인 한 경우 정의에 따라 등록됩니다.). 사용자가 현재 로그인되어있는 경우 user.given_name 정의됩니다로그인 한 사용자가 Flask-Stormpath로 로그인/등록 페이지에 액세스하지 못하게하는 방법은 무엇입니까?

{% block page_heading %} 

    {% if user.given_name %} 
     Already Logged in as {{ user.given_name }} 
    {% else %} 
     Enter your credentials 
    {% endif %} 

{% endblock page_subheading %} 

과 page_heading 블록은 '이미 기록 걸릴 것입니다 : 나는의 라인을 따라 뭔가를하고, 내 사용자 정의 로그인 페이지 템플릿 솔루션을 시도했다 (인증되지 않은 사용자가 로그인하려고 시도하는 정상적인 경우) '신임 정보 입력'메시지가 표시됩니다. 동일한 구성을 사용하여 로그인 양식이나 더 많은 오류 텍스트를 표시합니다. 그러나이 시도는 작동하지 않습니다. 로그인 한 사용자가/login을 방문하면 user.given_name은 항상 undefined로 되돌아갑니다. 이것은 누군가가 로그인하고 방문/로그인하면 로그 아웃된다는 것을 의미합니다. 이는 해결책을 찾는데 실패한 것입니다.

위와 같이 문서를 참조한 후에는 is_authenticated()를 사용할 수 있습니다. 그러나 Flask-Stormpath를 통해서가 아니라, 기본 Flask-Login 모듈을 통해, Flask-Stormpath는 항상이 문서를 True로 반환하도록 설정했기 때문에이 방법에 대해서는 알지 못합니다.

또한 내 접근법이 어색해. 파이썬 쪽 앱에 더 나은 솔루션이 있다고 생각한다.

그럼 내 질문은 다음과 같습니다. 사용자를 감지하는 가장 현명한 방법은 로그인되어 있고이를 부여 받거나 액세스하지 못하게하거나/login 및/register 페이지에서 리디렉션하는 것입니까? 아마도

@login_required 

반대 또는 나는 어쩌면 내가 오른쪽에 있었다,

@groups_required(['unauthorised']) 

에로 사용할 또는 수 내장 된 '무단'그룹 stormpath이 곳 마법의 장식이있다 내 원래 시도와 라인.

어떤 도움에 감사드립니다 :)

+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을 숨기는 것입니다.

많은 웹 사이트에는 처음에는 "로그인"과 어딘가에 "등록"이라고 표시된 상단 탐색 표시 줄이 있습니다. 그러나 일단 로그인하면 버튼이 다른 것으로 바뀝니다. 일반적으로 "대시 보드"또는 유사합니다.

이렇게하면 브라우저에 특별히 입력하고 수동으로 시도하지 않으면 사용자가/login 또는/register에 갈 수 없습니다.

나는 이것이 당신이 템플릿을 조건부 논리를 사용하여 수행 할 수있는 이상적인 시나리오라고 생각합니다 :

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

안녕하세요! 나는 이것을 해왔다. 로그인 한 사용자가 내 앱에서 액세스하거나 로그인하거나 등록하는 방법이 없다. 수동으로 주소 표시 줄에 들어가거나 로그인하는 경우가 내 질문에 언급되어있었습니다. 미안, 내 질문에 언급 했어야 했어! –

+0

그레이트 라이브러리 btw –