scala - Play 剪影未将密码插入数据库表

标签 scala playframework silhouette

我正在使用 play silhouette 4.0.0-BETA4 .除了存储密码外,一切似乎都正常。每次我尝试注册一个新用户时,除了似乎存储在 passwordinfo 中的密码外,所有详细信息都被输入。 table 。

我正在使用 MySQL 数据库。

我花了几个小时试图找出问题所在,但我无法弄清楚。

生成.sbt

  "com.mohiva" %% "play-silhouette" % "4.0.0-BETA4",
  "com.mohiva" %% "play-silhouette-persistence-memory" % "4.0.0-BETA4",
  "com.mohiva" %% "play-silhouette-password-bcrypt" % "4.0.0-BETA4",
  "com.mohiva" %% "play-silhouette-testkit" % "4.0.0-BETA4" % "test"

注册 Controller
val user = User(
  None,
  userID = UUID.randomUUID(),
  loginInfo = loginInfo,
  firstName = Some(data.firstName),
  lastName = Some(data.lastName),
  fullName = Some(data.firstName + " " + data.lastName),
  email = Some(data.email),
  avatarURL = None
)
for {
  avatar <- avatarService.retrieveURL(data.email)
  user <- userService.save(user.copy(avatarURL = avatar))
  authInfo <- authInfoRepository.add(loginInfo, authInfo)
  authenticator <- silhouette.env.authenticatorService.create(loginInfo)
  token <- silhouette.env.authenticatorService.init(authenticator)
} yield {
  silhouette.env.eventBus.publish(SignUpEvent(user, request))
  silhouette.env.eventBus.publish(LoginEvent(user, request))
  Ok(Json.obj("token" -> token))
}

这里authInfoRepository.add应该在数据库中添加密码。

我试图调试 add authInfoRepository 的功能它似乎让我找到了 add函数在 DelegableAuthInfoRepository.scala .这是函数:
  override def add[T <: AuthInfo](loginInfo: LoginInfo, authInfo: T): Future[T] = {
    daos.find(_.classTag.runtimeClass == authInfo.getClass) match {
      case Some(dao) => dao.asInstanceOf[AuthInfoDAO[T]].add(loginInfo, authInfo)
      case _         => throw new ConfigurationException(AddError.format(authInfo.getClass))
    }
  }

我用 IntelliJ 来评估 daos.find(_.classTag.runtimeClass == authInfo.getClass)它似乎给了我一个我无法理解的错误(错误是: Could not evaluate due to a change in a source file ;此错误仅在使用 IntelliJ 评估时出现,日志中没有其他任何内容)。如果我尝试继续执行,它会转到 case Some线。如果我继续,调试器返回到 daos.find线。我试图检查 add 的实现来自 case Some 的函数行,它似乎只找到与内存数据库相关的内容:InMemoryAuthInfoDAO.scala .

我不确定问题是否来自这里,但我真的不明白为什么它没有添加密码,其他一切都按预期工作。

我使用的代码取自Silhouette 网站的一些示例。我对安全的了解不多。

如果还有什么遗漏,请告诉我。

最佳答案

我解决了一个类似的问题。我添加了这一行。

/** SilhouetteModule.scala */

import net.ceedubs.ficus.readers.EnumerationReader._

希望它有帮助:D

关于scala - Play 剪影未将密码插入数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37821767/

相关文章:

json - Scala/Play 中的类似 REST 的 API 是否可以仅使用 POST 方法和 JSON 格式

java - 在 Play! 中处理字段集框架2.3(Java)

forms - 玩2.4 : Form: could not find implicit value for parameter messages: play. api.i18n.Messages

python - 错误: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor' in background subtrator code

scala - 将可变集合转换为不可变集合

scala - 使跨多个服务器的弱 HashMap 无效

scala - 如何证明Scala中的爆炸原理(ex falso sequitur quodlibet)?

java - 在 IntelliJ 中使用 build.sbt 排除 JAR 文件中的依赖项签名文件

scala - 玩 2.5 剪影 4 - 带有 guice 的 DI

scala - 使用请求数据的剪影授权