squeryl ORM在玩SHA1密码加密



我正在尝试使用squeryl ORM框架将用户名和加密密码对插入数据库表。我的代码基本上如下所示:

      class SHA1(e: StringExpression[String], m:OutMapper[String]) extends FunctionNode[String]("sha1", Some(m), Seq(e)) with StringExpression[String]
      def sha1(e:StringExpression[String])(implicit m:OutMapper[String]) = new SHA1(e,m)
      transaction{
        val foo = TestUser.userTable insert User("test@domain.com", sha1("password"))
      }

但这不起作用。我得到一个错误提示:

type mismatch; found : controllers.SHA1 required: String Error occurred in an application involving default arguments. 

Squeryl在这里所能发挥的魔力是有限的。你的模型类接受一个String值作为password,你传递给它一个SHA1类型的值(从SHA1函数返回的值)。scala编译器不允许这样做。这里有几个选项:

  1. 在将密码发送到数据库之前对其进行哈希处理
  2. 为密码插入一个空值的User,然后在通过函数
  3. 散列的密码的同一事务中更新它
  4. 如果你使用的是Squeryl 0.9.6-SNAPSHOT,你可以创建一个SHAString自定义类型来处理发送到DB的字符串的散列

要在插入密码之前散列密码,请查看java.security.MessageDigest并查看此答案。

最新更新