无法解决简单的auth scala中的类型错误,玩框架项目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法解决简单的auth scala中的类型错误,玩框架项目相关的知识,希望对你有一定的参考价值。

我有以下代码

package controllers

import play.api.mvc._

/**
  * Provide security features
  */
trait Secured {

  /**
    * Retrieve the connected user's email
    */
  private def username(request: RequestHeader) = request.session.get("username")

  /**
    * Not authorized, forward to login
    */
  private def onUnauthorized(request: RequestHeader) = {
    Results.Redirect(routes.Authentication.index)
  }

  /**
    * Action for authenticated users.
    */
  def IsAuthenticated(f: => String => Request[AnyContent] => Result) = {
    Security.Authenticated(username, onUnauthorized) { user =>
      Action(request => f(user)(request))
    }
  }
}

package controllers

import javax.inject.Inject
import play.api.i18n.MessagesApi
import play.api.mvc.Controller
import service.userService
import views._
import scala.concurrent.ExecutionContext.Implicits.global

class Restricted @Inject()
(userService: userService,
 val messagesApi: MessagesApi) extends Controller with Secured {

  /**
    * Display restricted area only if user is logged in.
    */
  def index = IsAuthenticated { user =>
    _ => userService.getUser(username).map {
      Ok(views.html.restricted(user))
    }.getOrElse(Forbidden)
  }

}

但是我无法编译它,它继续在带有类型不匹配的views.html.restricted(user)上失败,期望:String => Request [AnyContent] => Result,actual:String => Request [AnyContent] => Any。我是scala和play的新手,经过几个小时的谷歌搜索,我找不到任何类似于我的错误。

答案

我已设法通过将userService.getUser的返回类型从选项[User]更改为User并添加try / catch来处理如果找到None来解决此问题。

以上是关于无法解决简单的auth scala中的类型错误,玩框架项目的主要内容,如果未能解决你的问题,请参考以下文章

AUTH_USER_MODEL 指的是尚未安装和创建的模型 .. AbstractUser 模型无法登录

多个错误 auth0 反应 apollo babel webpack

Cats Scala中的序列和遍历以映射类型

玩 2.1 Scala SQLException Connection Timed out waiting for a free available connection

Play Framework表单中的Scala奇怪类型错误

Scala新版本学习: