1

私が理解できない簡単な質問(Googleやドキュメントのどこにもありません-おそらくそれは明白ですが、私にはわかりません)。Playでslickを使用しています!Framework 2.1と私は、機密性の高いユーザー情報をデータベースに保存したいと考えています。データが保存されるたびに(そして、で構築されている場合はメモリ内にcase class)データを暗号化し、必要になるたびにデータを復号化したいです。データはOAuthaccess_tokenです。

これが私の(簡略化された)コードです:

case class User(id: Option[Int] = None,
                name: String,
                email: String,
                oauthToken: Option[String] = None)

オブジェクト:

object Users extends Table[User]("User") {
  def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
  def name = column[String]("name")
  def email = column[String]("email")
  def oauthToken = column[String]("oauthToken", O.Nullable)

  def * = id.? ~
          name ~
          email ~
          oauthToken.? <> (User, User.unapply _)
}

私がやりたいのは、ケースクラスが構築されるoauthTokenたびに暗号化することです。と呼ばれるUserたびにそれを復号化します。user.oauthToken今のところ、私の最善の推測は、のゲッターとセッターを変更することですがoauthToken、私が知る限り、Scalaでは実際にそれを行うことはできません(Slickへの影響は言うまでもありません)。

フィールドで暗号化/復号化を取得するにはどうすればよいですか?

前に感謝します。

4

1 に答える 1

1

このような何かがトリックを行う必要があります

// get user
Users.where(_.id is Some(1)).map(decodeUser)

def decodeUser(u: User) =
  u.copy(oauthToken = u.oauthToken.map(/* do decoding */))

// store user
for{
  model <- userForm.bindFromRequest
  id <- Users(encodeUser(model)).insert
} yield id

def encodeUser(u: User) =
  u.copy(oauthToken = u.oauthToken.map(/* do encoding */))
于 2013-01-28T15:06:45.647 に答える