Play framework with Scala を使ってみようシリーズです。
その1
その2
その3
今日はUserServiceを使ってログインしてみようと思います。
今回のサンプルのソースは https://github.com/ueshin/play-hello/tree/play-hello-0.0.2 でブラウズできます。
その1
その2
その3
今日はUserServiceを使ってログインしてみようと思います。
今回のサンプルのソースは https://github.com/ueshin/play-hello/tree/play-hello-0.0.2 でブラウズできます。
GAE
クラス
GAEモジュールが提供するplay.modules.gae.GAE
クラスに便利なメソッドがたくさん定義されています。今回は、そのうちの
login()
/logout()
メソッドを使います。login()
メソッド
Controller
からこのメソッドを呼べばGoogleアカウントのログイン画面にリダイレクトします。引数でログイン後の戻り画面を指定することができます。
指定は
"ControllerClassName.actionMethodName"
の形式の文字列です。引数がない場合には呼び出した画面に戻って来ます。
管理画面など、ある画面にアクセスしたらログイン画面表示、ログイン後戻ってくる、などの場面で利用出来ます。
ログインリンクのアクションで引数なしにするとログイン後再度ログイン画面になってしまうので注意。
logout()
メソッド
Controller
からこのメソッドを呼べばGoogleアカウントからログアウトします。引数でログアウト後の戻り画面を指定することができます。
指定は
login()
メソッドと同様、"ControllerClassName.actionMethodName"
の形式の文字列です。こちらも引数なしにして呼び出した画面に戻るようにすることができます。
ただし、ログアウトリンクのアクションで引数なしを使うとログアウト後にまたログアウト・・・とループしてしまいます。
引数なしの
logout()
メソッドは呼び出す場面が思い浮かびません。。。getUser()メソッド
GoogleアカウントにログインしていればUser
オブジェクトを、していなければnull
を返します。ログインチェックとユーザー情報取得(メールアドレスのみ)に使います。
Application.scala
それでは実際のコードを見てみます。app/controllers/Application.scala (前のcontrollers.scalaから移動しています)
package controllers
import _root_.play._
import _root_.play.mvc._
import _root_.play.modules.gae._
object Application extends Controller with Defaults {
def index = Template
def login = GAE.login("Application.index")
def logout = GAE.logout("Application.index")
}
login
/ logout
アクションを追加して、UserService
へのログイン/ログアウトとしています。戻りは元のトップ画面です。
Defaults
トレイト
Defaults
トレイトをミックスインしています。事前処理としてログインチェックとユーザー情報取得を行います。
app/controllers/Defaults.scala
package controllers
import _root_.play._
import _root_.play.mvc._
import _root_.play.modules.gae._
trait Defaults extends Controller {
@Before
def check = {
Option(GAE.getUser) match {
case Some(user) => {
renderArgs += "user" -> user
}
case None =>
}
}
}
routes
コントローラーとURLパスのルーティングを行います。conf/routes
Application.login
とApplication.logout
の設定を追加しました。 (diff)デフォルトでは
/{controller}/{action}
という設定があるので、例えば /application/index
というパスが有効です。このパターンにマッチする場合には設定を追加する必要はありません。
view
画面のHTMLテンプレートは、app/views
以下、ControllerClassName/actionMethodName.html
のようなファイル名で置かれます。app/views/Application/index.html
どなたかがデザインをあててくれることを切に願います。
ローカル動作確認
ローカルで動作確認する場合には、ログイン画面のモック画面が表示されるようになっていますので、適当なアカウントでログインして動作確認することができます。デプロイ
動作確認が完了したら、デプロイします。$ play gae:deploy play-hello --gae=${GAE_SDK_HOME}
ブラウザで確認します。
Welcome Guest!