2.4.x.Search§認証機能の追加ここまででダッシュボードを表示することができるようになりました。ユーザ達にタスクを作り、アサインし、取り組むことを許可する前に、ユーザ達が自身を認証する方法が必要です。始めるに当たって、ユーザがログインできる画面を実装しましょう。開いて、ルートが動作していることを確認してください。タイトルは別として、空白のページが表示されるはずです。パスワードを保持するフォームが必要です。オブジェクトとしてフォームを実装するところから始めましょう。インナークラスを宣言してください。password;}このフォームをレンダリングするためにテンプレートに引き渡す必要があります。Form[Application.Login])<html>...フォームをレンダリングする必要があります。いうルートを引き渡しました。このフォームがどこに投稿されるべきかを伝えます。構造を変更できることを意味しています。リッチなフォームタグのセットを提供していますが、このログインフォームには行き過ぎたものです。これらはこのチュートリアルの後半で目にすることになるでしょう。ルートはまだ実装されていないので、ここで実装していきましょう。アクションはフォームを読み込む以外は何もしていません。次にやりたいことはフォームのバリデーションです。メソッドを書いていきましょう。メソッドを使っています。}}このコードはいくつかの新しい概念を紹介しています。ステータスを返却します。フォームを返却する際、フォームからあらゆるバリデーションエラー、そしてユーザが入力した値を抽出し、それらをユーザに書き戻すことができます。バリデーションに成功した場合は、セッションに属性を追加します。このセッション属性は、後で現在ログインしているユーザを検出するために使用します。リダイレクトを発行します。テンプレートにアセットを取り込むときと同じように、ダッシュボードアクションを参照するためにリバースルーターを使っていることが分かるでしょう。バリデーションについてはほとんど完了です。あとひとつ残っているのは、バリデーション失敗時のエラーメッセージの表示です。このフォームを使ってエラーメッセージを取得します。</p>}ここで不正なパスワードでログインしてみましょう。入力し直してログインします。ダッシュボードに案内されるはずです。§アクションのテストそろそろアクションのテストを書き始めていい頃です。これが動作することを確認しましょう。渡していることを確認してください。壊れてしまっています。使うよう更新するべきです。session(result).get("email"));}ここにはいくつかの新しい概念が紹介されています。リバースルーターを使っていることです。引き渡して実行するアクションの参照を取得することができます。アクションへの参照を取得しました。フェイクリクエストも作成しています。保持するフォームボディを与えています。いうヘルパーメソッドを使っています。アドレスを使って正しく認証すると、セッションにこのアドレスが追加されることを確認しています。この他に、ヘッダやボディのような、テスト結果のその他の箇所にアクセスするためのヘルパーメソッドが存在します。テスト結果を直接取得しないのか不思議に思うかもしれません。必要に応じてそれらを展開する必要があるためです。テストを実行してこれが成功することを確認してください。assertNull(session(result).get("email"));}このテストを実行して、成功することを確認してください。§認証機能の実装これでログインできるようになったので、アクションを認証機能で保護していきましょう。アクション合成を使うことでこれを実現することができます。アクション合成は、複数のアクションを連鎖するようにまとめて組み立てる機能です。それぞれのアクションは、次のアクションにリクエストを委譲する前に何らかの処理を行うことができますし、処理結果を変更することもできます。あるアクションは、次のアクションにリクエストを引き渡さずに、自分自身で処理結果を生成することを決断することもできます。認証用のアクションが既に組み込まれているので、これを継承して機能を追加したいと思います。呼ぶことにしましょう。}}ここでふたつのメソッドを実装しました。現在ログインしているユーザーのユーザー名を取得するために使われます。アドレスを取得します。このメソッドが値を返すと、認証機能はユーザーがログインしているものと見なし、リクエストを続行します。ダッシュボードでこの認証機能を使ってみましょう。result));}テストを実行して認証機能が動作していることを確認してください。ブラウザでダッシュボードにアクセスしてみてください。正しくログインしていれば、ダッシュボードを見ることができていると思います。ログイン済みなので、認証機能はリクエストをブロックしません。ブラウザを閉じてログアウトすることもできますが、今こそログアウトアクションを実装するのにふさわしい時です。);}セッションをクリアすることでユーザーをログアウトしているのが分かると思います。ここで新しい概念がひとつ登場します。スコープに属性として成功メッセージを追加しました。スコープは、次のリクエストがやってくるまでしか存続しないことを除いて、セッションと似ています。これを使うことで、リダイレクトリクエストがやってきたときにログインテンプレートに成功メッセージを表示することができます。</dl></header>ブラウザでダッシュボードにアクセスしてログアウトし、再度ダッシュボードにアクセスしてみてください。ダッシュボードを見ることができず、ログイン画面にリダイレクトされるはずです。ログインすれば、再度ダッシュボードを見ることができるでしょう。§現在のユーザーを使用する最後にやっておきたいことがもうひとつあります。メソッドを通じて得られます。アドレスを提供します。メインテンプレートのログアウトリンクの隣りにユーザー名を配置しましょう。ユーザー名を取得するためには、実際にユーザー情報全体をデータベースから読み込まなければなりません。モデルに実装したメソッドを使って、ユーザーがメンバーに含まれているプロジェクトと、ユーザーがアサインされているタスクも絞り込みましょう。</dd></dl>ログインしていることを確認したら、再度ダッシュボードにアクセスしてください。現在ログインしているユーザーと、このユーザーがアクセスできるプロジェクト、そしてこのユーザーがアサインされているタスクだけを見ることができます。作業内容をコミットしてください。チームによってメンテナンスされているものではありません。確認することができます。読んで、お気軽にプルリクエストを送ってください。