2016-07-26 4 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を返すように設定しています。しかし、これについてどう考えているのか分かりません。

さらに、私のアプローチはハッキリです。私は、アプリのPython側にもっと良い解決策があると感じています。

これは私の質問です。ユーザーを検出する最も賢明な方法は、ログインしてこれを与え、アクセスしないようにするか、/ 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

私はFlask-Stormpathの作者です。私はここに飛び込むと思っていました。 login/registerの動作を変更するのではなく(ライブラリーのリリースで定期的にその内容を変更することはお勧めしません)、より良い解決策は、ログインしたユーザーを単に非表示にすることです。

たとえば、多くのウェブサイトには、最初に「ログイン」と「登録」と書かれているトップナビゲーションバーがあります。しかし、いったんログインすれば、それらのボタンは何か他のもの、通常は「Dashboard」などに変わります。

このようにして、ユーザーはブラウザに特に入力して手動で移動しようとしない限り、/ loginまたは/ registerに行くことはできません。

私は、これはあなたがテンプレート条件ロジックを使用して実行できる理想的なシナリオ、だと思う:

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

ちょっと、ちょっと!私はこれをやっている - ログインしたユーザーが私のアプリ内からアクセス/ログインする/登録する方法はありません。私の質問では、手動でアドレスバーに入力/ログインするケースがありました。申し訳ありませんが、私は私の質問でそれを言及すべきでした! –

+0

グレートライブラリbtw –

関連する問題