【问题标题】:squeryl ORM in Play with SHA1 password encryption使用 SHA1 密码加密的 squeryl ORM
【发布时间】:2013-04-23 21:18:11
【问题描述】:

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

【问题讨论】:

    标签: scala playframework squeryl


    【解决方案1】:

    Squeryl 在这里可以施展的魔法是有限度的。您的模型类接受一个字符串值作为密码,并且您正在向它传递一个 SHA1 类型的值(从 sha1 函数返回的值)。 scala 编译器不允许这样做。这里有几个选项:

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

    要在插入密码之前对其进行哈希处理,请查看java.security.MessageDigestthis answer

    【讨论】:

    • 嗨戴夫,我已经尝试在将密码发送到数据库之前对其进行哈希处理。所以你的 1 和 2 正是我想要做的。你能提供一些额外的帮助吗?谢谢。
    • 我已经更新了答案,提供了一些关于如何在插入记录之前在数据库之外散列密码的信息。
    • 您可以使用 akka.util.Crypt.sha1() 方法生成 SHA1 哈希。
    猜你喜欢
    • 1970-01-01
    • 2011-03-03
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    相关资源
    最近更新 更多