首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >play silhouette未将密码插入数据库表

play silhouette未将密码插入数据库表
EN

Stack Overflow用户
提问于 2016-06-15 04:45:05
回答 2查看 656关注 0票数 5

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

我使用的是MySQL数据库。

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

build.sbt

代码语言:javascript
复制
  "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"

SignUpController

代码语言:javascript
复制
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应该在数据库中添加密码。

我试着调试authInfoRepositoryadd函数,它似乎将我带到了DelegableAuthInfoRepository.scala中的add函数。下面是函数:

代码语言:javascript
复制
  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行。我尝试从case Some行检查add函数的实现,结果似乎只在内存数据库中找到了一些相关的东西:InMemoryAuthInfoDAO.scala

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

我使用的代码取自Silhouette网站上的几个例子。我没有太多关于安全的知识。

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

EN

回答 2

Stack Overflow用户

发布于 2016-06-27 11:36:11

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

代码语言:javascript
复制
/** SilhouetteModule.scala */

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

希望它能有所帮助:D

票数 9
EN

Stack Overflow用户

发布于 2020-06-25 15:54:24

我知道这太迟了。但是,它可能会对某些人有所帮助。解决方案是创建自己的扩展DelegableAuthInfoDAO的类。正如SilhouetteModule中注释的那样,它默认使用InMemmoryAuthInfoDAO类。

代码语言:javascript
复制
// Replace this with the bindings to your concrete DAOs
bind[DelegableAuthInfoDAO[GoogleTotpInfo]].toInstance(new InMemoryAuthInfoDAO[GoogleTotpInfo])
// this line has been changed to persist passwords in a DB
bind[DelegableAuthInfoDAO[PasswordInfo]].toInstance(new DBAuthDAO)
// this line has been changed to persist passwords in a DB
bind[DelegableAuthInfoDAO[OAuth1Info]].toInstance(new InMemoryAuthInfoDAO[OAuth1Info])
bind[DelegableAuthInfoDAO[OAuth2Info]].toInstance(new InMemoryAuthInfoDAO[OAuth2Info])
bind[DelegableAuthInfoDAO[OpenIDInfo]].toInstance(new InMemoryAuthInfoDAO[OpenIDInfo])

此代码块位于SilhouetteModule.scala中

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37821767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档