Scala 在Slick上保存加密字段

Scala 在Slick上保存加密字段,scala,slick,Scala,Slick,一个我无法理解的简单问题(在谷歌或文档中都找不到——也许是显而易见的,但对我来说不是)。我在玩滑头!Framework2.1,我想在数据库中保存一些敏感的用户信息。我想在每次数据要保存时(以及在内存中,在case类中构造时)加密数据,并在每次需要时解密数据。数据是一个OAuthaccess\u令牌 以下是我的(简化)代码: 对象: object Users extends Table[User]("User") { def id = column[Int]("id", O.PrimaryKe

一个我无法理解的简单问题(在谷歌或文档中都找不到——也许是显而易见的,但对我来说不是)。我在玩滑头!Framework2.1,我想在数据库中保存一些敏感的用户信息。我想在每次数据要保存时(以及在内存中,在
case类
中构造时)加密数据,并在每次需要时解密数据。数据是一个OAuth
access\u令牌

以下是我的(简化)代码:

对象:

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 _)
}
对象用户扩展表[User](“User”){
def id=列[Int](“id”,O.PrimaryKey,O.AutoInc)
def名称=列[字符串](“名称”)
def email=列[字符串](“电子邮件”)
def oauthToken=列[String](“oauthToken”,O.Nullable)
def*=id~
名字~
电子邮件~
oauthToken.?(用户,User.unapply)
}
我想做的是在每次构造
User
case类时加密
oauthToken
。并在每次调用
user.oauthToken
时对其进行解密。目前,我的最佳猜测是更改
oauthToken
的getter和setter,但据我所知,在Scala中我们无法真正做到这一点(更不用说对Slick的影响)

我应该怎么做才能在字段上进行加密/解密


以前谢谢你。

像这样的东西应该可以奏效

// 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 */))
//获取用户
Users.where(.id是Some(1)).map(decodeUser)
def解码用户(u:用户)=
u、 复制(oauthToken=u.oauthToken.map(/*do decoding*/)
//商店用户
为了{

model像这样的东西应该能奏效

// 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 */))
//获取用户
Users.where(.id是Some(1)).map(decodeUser)
def解码用户(u:用户)=
u、 复制(oauthToken=u.oauthToken.map(/*do decoding*/)
//商店用户
为了{

模型这是否意味着我不将加密令牌保存在数据库中?每次我想插入/获取用户时,我都必须调用
encodeUser
decode user
?啊,是的,我现在得到了。我会将它们抽象出来以便更容易使用。非常感谢!这是否意味着我不将加密令牌保存在数据库中?我必须调用
每次我想插入/获取用户时,编码用户
和解码用户
吗?啊,是的,我现在就得到了。不过我会将它们抽象出来以便更容易使用。非常感谢!