如何在scala中使用oauth2实现Generic slick dao

时间:2017-01-02 09:21:59

标签: scala oauth-2.0 akka-http slick-3.0

要使用scala中的OAuth2,Slick,Akka-HTTP,我使用了cdiniz https://github.com/cdiniz/slick-akka-http-oauth2中的代码。

我尝试创建DAO:UserDao和相应的API:UserApi,以便在成功验证OAuth2后从数据库中获取所有记录(以JSON格式)。

BaseDao代码:

trait BaseDao[T,A] {
  ...
  def getAll(): Future[Seq[A]]
}

class BaseDaoImpl[T <: BaseTable[A], A <: BaseEntity]()(implicit val tableQ: TableQuery[T], implicit val db: JdbcProfile#Backend#Database,implicit val profile: JdbcProfile) extends BaseDao[T,A] with Profile with DbModule {

  import profile.api._

  ...
  override def getAll(): Future[Seq[A]] = {
    db.run(tableQ.result)
  }

}

UserDao代码:

object UserService {
  val modules = new ConfigurationServiceImpl with ActorServiceImpl with PersistenceServiceImpl
  import modules._    
  class UserDao extends BaseDaoImpl[UserTable,UserEntity1] {}

}

UserApi代码:

//using io.circe for json encoder
class UserApi(val modules: Configuration with PersistenceService, val db: DatabaseService)(implicit executionContext: ExecutionContext) extends BaseApi {
  override val oauth2DataHandler = modules.oauth2DataHandler

  val userService = new UserDao
  val testApi = pathPrefix("auth") {
    path("users") {
      pathEndOrSingleSlash {
        get {
          authenticateOAuth2Async[AuthInfo[OauthAccount]]("realm", oauth2Authenticator) {
            auth => complete(userService.getAll().map(_.asJson))
          }

        }
      }
    }
  }
}

支持代码:

trait Profile {
  val profile: JdbcProfile
}


trait DbModule extends Profile{
  val db: JdbcProfile#Backend#Database
}

trait PersistenceService {
  val accountsDao: AccountsDao
  val oAuthAuthorizationCodesDao: OAuthAuthorizationCodesDao
  val oauthClientsDao: OAuthClientsDao
  val oauthAccessTokensDao:  OAuthAccessTokensDao
  val oauth2DataHandler : DataHandler[OauthAccount]
}


trait PersistenceServiceImpl extends PersistenceService with DbModule{
  this: Configuration  =>

  private val dbConfig : DatabaseConfig[JdbcProfile]  = DatabaseConfig.forConfig[JdbcProfile]("mysqldb")

  override implicit val profile: JdbcProfile = dbConfig.driver
  override implicit val db: JdbcProfile#Backend#Database = dbConfig.db


  override val accountsDao = new AccountsDaoImpl
  override val oAuthAuthorizationCodesDao = new OAuthAuthorizationCodesDaoImpl
  override val oauthClientsDao = new OAuthClientsDaoImpl(this)
  override val oauthAccessTokensDao = new  OAuthAccessTokensDaoImpl(this)
  override val oauth2DataHandler = new OAuth2DataHandler(this)
}

这里,代码运行没有任何问题,但是虽然有记录,但是没有获得任何记录作为响应。

这段代码中我无法解决的问题是什么?任何建议都是可以理解的。

0 个答案:

没有答案