ログイン必須のアクション定義
ログインしてなかったら…という処理は皆書く筈。
Playframework 2.1 あたりから Security クラスが出来たらしい。
当然 2.2 でも使えるのでメモ。
package controllers.helpers import play.api.mvc._ import controllers.routes trait LoginController { self: Controller => private val LOGIN_SESSION_KEY = "login.session.key" /** * Login or redirect to index. * @param parser * @param f * @tparam A * @return */ def authAction[A](parser: BodyParser[A])(f: Request[A] => Result) = Security.Authenticated(getLoginId, onUnauthorised) { user => Action(parser)(f) } /** * @see loginAction * @param f * @return */ def authAction(f: Request[AnyContent] => Result) = authAction(BodyParsers.parse.anyContent)(f) /** * Get login session. * @param request * @return */ private def getLoginId(request: RequestHeader) = session.get(LOGIN_SESSION_KEY) /** * Get login session. * @param request * @return */ def loginId(implicit request: RequestHeader) = getLoginId(request) /** * Handled when unauthorised. * @param request * @return */ def onUnauthorised(request: RequestHeader) = Results.Redirect(routes.Application.index().url).flashing(("message", "Require login")) }
コピペで使える安心仕様。
object Application extends Controller with LoginController { def about = authAction { implicit request:Request[AnyContent] => // ... 略 } }
素で書いてもそんな変わらないかも?とか思った。