基本的に私のアプリケーションのログイン/登録ランディングページがあります。ユーザーがログインまたは登録した後、私は彼らがもうこのルートにアクセスできないようにします。私はHapi.jsでこれを達成する方法がわかりません。ログインページは認証戦略を使用しないので、ユーザーがログインしているかどうかはわかりません。ユーザーがHapi.jsでログインしている場合にログインルートを無効にする
3
A
答えて
7
私が通常これを使用するアプローチは、ルート自体を無効にするのではなく、ログインしているユーザーをログインルートからリダイレクトすることです。
誤って指摘したように、ログインルートは現在、認証戦略が設定されていないユーザーがログインしているかどうかはわかりません。解決策は、にのログイン戦略に認証戦略を追加することですが、を試してモードを使用してください。これは、認証が成功したかどうかにかかわらずハンドラが実行されることを意味します。そのトリックは、ユーザーが(request.auth.isAuthenticated
の値を調べることによって)認証されているかどうかを確認し、それに応じて反応することができるということです。
だからあなたのルートは、次のようになります。同じ結果に
server.route({
config: {
auth: {
strategy: 'session',
mode: 'try'
}
},
method: 'GET',
path: '/login',
handler: function (request, reply) {
if (request.auth.isAuthenticated) {
return reply.redirect('/'); // user is logged-in send 'em away
}
return reply.view('login'); // do the login thing
}
});
別のアプローチは、すべてのルートのデフォルトとしてモードを試してみてくださいであなたの認証戦略を設定することです:
server.auth.strategy('session', 'cookie', 'try', {
password: 'password-that-is-longer-than-32-chars',
isSecure: true
});
3番目の引数try
に注目してください。この方法では、デフォルトでこの戦略を試すため、ルート自体に認証設定を追加する必要はありません。 server.auth.strategy
ドキュメントによれば:
mode
- trueの場合は、方式が自動的に認証設定せずに任意の経路に必要な戦略として割り当てられています。単一のサーバー戦略にのみ割り当てることができます。値はtrue(「必須」と同じ)または有効な認証モード(「必須」、「オプション」、「試行」)でなければなりません。デフォルトはfalseです。
hapiサイトのAuthentication tutorialのモードに関する情報があります。
関連する問題
- 1. Wordpressユーザーがログインしていない場合はページを無効にする
- 2. ユーザーがすでにAngular 4でログインしている場合、ログインルートへのアクセスを制限する方法は?
- 3. Angular 2/4:ユーザーが既にログインしている場合、ログインルートへのアクセスを制限する方法は?
- 4. ソーシャルネットワーク(Google)を使用してユーザーがログインしている場合、Spring Securityを無効にする
- 5. ログインしたユーザーがFlask-Loginでログインルートにアクセスしないようにする
- 6. ユーザーをホームページにリダイレクトするか、ログインしていない場合は送信ボタンを無効にする
- 7. ユーザーがログインしている場合にインデックスページをリダイレクトする
- 8. ログインしていないユーザーのチェックアウトページを無効にする
- 9. GameCenter - 既にログインしているユーザー(ログイン済みの場合)
- 10. CloudKit publicコンテナアクセスユーザーがログインしているのにiCloudドライブが無効になっている場合
- 11. ユーザーがDrupalにログインしている場合、ログアウトボタンを表示するには?
- 12. Devise - 同じユーザーが別のブラウザ/マシンからログインした場合にユーザーセッションを無効にする
- 13. Laravelでユーザーが無効になっているとログインが制限される
- 14. ユーザがログインしていない場合、ログインにリダイレクトする -
- 15. ユーザーがログインしていない場合は登録ページにリダイレクト
- 16. ユーザーがログインしている場合はjavacriptファイルを追加
- 17. オープナーがオンザフライで無効になっている場合、nyromodalがモーダルを開くのを無効にする
- 18. ユーザーが既にログインしている場合は、登録後にログインしないでください
- 19. ユーザーが既にログインしている場合に基づいてログイン/ログアウトを切り替えます
- 20. ファイルが存在しない場合、バーボタンを無効にする
- 21. this.propsを使用している場合、無効にするとチェックボックスの機能が無効になります
- 22. ユーザーが選択した場合、JQueryデータテーブルのチェックボックスを無効にする
- 23. ユーザーがログインしている場合のAndroidの通知
- 24. ユーザーがログインし、ユーザーIDまたはレベル= "x"を表示している場合
- 25. ユーザーが終了するとNSTimerを無効にして無効にします。
- 26. ユーザーがログインしている場合、ラーバル検証が必要です
- 27. iOS - ブレークポイントが無効になっている場合のみNSRangeException
- 28. Java-「JButtonが無効になっている場合は___」
- 29. ユーザーがすでにサインインしている場合にログイン画面を非表示にする方法
- 30. simcardが電話機にインストールされていない場合にエラーダイアログを無効/無効にする方法
偉大な答えは、私は '試し 'オプションを見落としたか分からない。 –