【问题标题】:Play framework scala form object for password field binding?为密码字段绑定播放框架 scala 表单对象?
【发布时间】:2016-11-08 07:03:36
【问题描述】:

我的模型如下:

case class User(uid: Option[Int], email: String, password: String, created_at: Timestamp, updated_at: Timestamp)

case class UserProfile(firstname: String, lastname: String, gender: Int, user_id: Long)

我定义了表单绑定如下:

    val date = new Date()
  val currentTimestamp= new Timestamp(date.getTime());
  val registerForm = Form(
    tuple(
          "user" -> mapping(
            "uid" -> optional(number),
            "email" -> email,
            "password" -> nonEmptyText,
            "created_at" -> ignored(currentTimestamp),
          "updated_at" -> ignored(currentTimestamp)
        )  (User.apply)(User.unapply),
        "profile" -> mapping(
          "firstname"->nonEmptyText,
          "lastname"->nonEmptyText,
          "gender" -> ignored(0),
          "user_id" -> ignored(0L)
        )(UserProfile.apply)(UserProfile.unapply))
    )

现在,我想在使用 slick 将密码保存/插入到 db 之前使用散列存储密码。 我可以尝试通过创建一个新的用户对象来做到这一点,但这听起来不像是有效的方法。

还有其他方法吗?

提前致谢

------------------------------------------ 编辑 1 --- -------------------------------------------------- ----- 这是我使用 slick 的插入逻辑:

def insert(user: User): Future[Any] = {
    println("coming inside insert of user dao")
    println(user)
//    insertUP(user)
    db.run((Users returning Users.map(_.uid)) += user)
  }

【问题讨论】:

  • 在您进行插入/更新时调用一个方法来加密密码怎么样?你能粘贴你的插入逻辑吗?
  • @RobertUdah 尝试分配散列密码,但由于无法重新分配插入的用户对象值,因此无法解决问题。我已在我的问题中使用插入逻辑更新了我的编辑。

标签: scala playframework slick slick-3.0 playframework-2.5


【解决方案1】:

比如:

def insert(user: User): Future[Any] = {
  val hashedPassword = hashPassword(user.password)
  val updatedUser = user.copy(password = hashedPassword)
  db.run((Users returning Users.map(_.uid)) += updatedUser)
}

【讨论】:

  • 斯卡拉的魔力! :) 这是一个很好的解决方案,谢谢。我为此使用了 Bcrypt 库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多