使用SHA1密码加密播放squeryl ORM

时间:2013-04-22 05:08:54

标签: scala playframework squeryl

我正在尝试使用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. 

1 个答案:

答案 0 :(得分:1)

Squeryl在这里可以表现的魔力是有限的。您的模型类为密码获取String值,并且您传递的值为SHA1类型(从sha1函数返回的值)。 scala编译器不会允许这样做。这里有几个选项:

  1. 在将密码发送到db
  2. 之前对其进行哈希处理
  3. 使用空值插入您的用户密码,然后通过您的函数使用密码哈希在同一事务中更新它
  4. 如果您使用的是Squeryl 0.9.6-SNAPSHOT,则可以创建一个SHAString自定义类型,用于在将字符串发送到数据库时对其进行哈希处理
  5. 要在插入密码之前对其进行哈希处理,请查看java.security.MessageDigest并查看this answer