5

を使用してplay silhouette 4.0.0-BETA4います。パスワードの保存を除いて、すべてが正常に機能しているようです。新しいユーザーをサインアップしようとするたびに、passwordinfoテーブルに保存されているように見えるパスワードを除いて、すべての詳細が入力されます。

MySQL データベースを使用しています。

問題がどこにあるかを見つけようとして数時間費やしましたが、それを理解できませんでした。

build.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"

SignUpController

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に到達したようです。関数は次のとおりです。addDelegableAuthInfoRepository.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.findadd行から関数の実装を確認しようとしましたが、case SomeIn Memory Database: に関連するものしか見つからないようですInMemoryAuthInfoDAO.scala

問題がここから来ているかどうかはわかりませんが、なぜパスワードが追加されず、他のすべてが期待どおりに機能するのか本当に理解できません。

私が使用したコードは、Silhouette Web サイトのいくつかの例から取得しました。セキュリティについての知識はあまりありません。

他に不足しているものがあれば、お知らせください。

4

2 に答える 2

9

同様の問題を解決しました。この行を追加しました。

/** SilhouetteModule.scala */

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

それが役立つことを願っています:D

于 2016-06-27T03:36:11.400 に答える