scala - Basic authentication with play2-auth in Play 2.5.x -


in example below, intent build simple play2-auth program authenticates user keeps session until log out.

problem following compilation error in managesession.scala:

object creation impossible, since: has 6 unimplemented members

this source code, took sample play2-auth website , simplified, function signatures same:

authconfigimpl.scala:

import play.api.mvc._ import scala.reflect._ import play.api.mvc.requestheader import play.api.http.status import play.api.mvc.results._ import jp.t2v.lab.play2.auth._  trait authconfigimpl extends authconfig {    type id = string   type user = account   val idtag: classtag[id] = classtag[id]   val sessiontimeoutinseconds: int = 3600    def loginsucceeded(request: requestheader): result = redirect("/main",status.ok)   def logoutsucceeded(request: requestheader): result = redirect("/main",status.ok)   def authenticationfailed(request: requestheader): result = redirect("/main",status.ok)   def authorizationfailed(request: requestheader): result = forbidden("no permission")   def authorize(user: user, authority: authority): boolean = true  //override lazy val cookiesecureoption: boolean =  //  play.api.play.current.configuration.getboolean("auth.cookie.secure").getorelse(true)  } 

managesession.scala:

import play.api.mvc._ import play.api.data._ import play.api.data.forms._ import scala.concurrent.executioncontext.implicits.global import jp.t2v.lab.play2.auth._  object managesession extends controller loginlogout authconfigimpl {    val loginform = form {     mapping("email" -> email, "password" -> text)(account.authenticate)     (_.map(u => (u.email, "")))       .verifying("invalid email or password", result => result.isdefined)   }    def login = action { implicit request =>     ok(views.html.showlogin())   }    def logout = action { implicit request =>     //gotologoutsucceeded     ok("logged out")   }    def authenticate = action { implicit request =>     loginform.bindfromrequest.fold(       formwitherrors => badrequest(views.html.showlogin()),       user => ok("logged in") // gotologinsucceeded(user.get.email)     )   } } 

account.scala:

case class account(id: int, email: string, password: string, name: string)  object account  {    def authenticate(email: string, password: string): option[account] = {       if (email == "test")           some(account (1, "test", "abc", "paul"))       else           none   } 

gotologinsucceeded , gotologoutsucceeded in play2-auth return future[result], action expects result. can fix using action.async:

def logout = action.async { implicit request =>   // something...   gotologoutsucceeded }  import scala.concurrent.future  def authenticate = action.async { implicit request =>   loginform.bindfromrequest.fold(     formwitherrors => future.successful(badrequest(views.html.showlogin())),     user => gotologinsucceeded(user.get.id)   ) } 

the same must done authconfig. of these methods expected return future[result]. example

def loginsucceeded(request: requestheader): future[result] =      future.successful(redirect("/main", status.ok)) 

and on.