MongoMetaRecord MegaProtoUser Пароль не хэшируется при входе в систему - PullRequest
1 голос
/ 18 июля 2011

Я использую MegaProtoUser в своем приложении Lift / Scala для управления пользователями.

В моем работающем приложении я могу зарегистрироваться с новым пользователем в обычном режиме, и он остается активным сразу после регистрации.После того, как я вышел из системы и попытался войти в систему с тем же именем пользователя и паролем, приложение жалуется, что имя пользователя / пароль неверны.

Я проверил запись в базе данных Mongo для поля пароля и обнаружил, что пароль хешируется.

Если я скопирую и вставлю хешированный пароль базы данных mongo непосредственно в поле пароля веб-приложения, пользователь войдет в систему. Пароль в базе данных выглядит следующим образом: oqGR / cR + phb7fpSOL1Bpi8mtV ...

Код для model.User.scala:

/**
 * The singleton that has methods for accessing the database
 */
object User extends User with MongoMetaRecord[User] with MetaMegaProtoUser[User] {
  override def screenWrap = Full(<lift:surround with="default" at="content">
      <lift:bind /></lift:surround>)
  // define the order fields will appear in forms and output
  override def fieldOrder = List(id, firstName, lastName, email,
                                 locale, timezone, password)

  // comment this line out to require email validations
  override def skipEmailValidation = true

}

/**
 * An O-R mapped "User" class that includes first name, last name, password and we add a "Personal Essay" to it
 */
class User private() extends MongoRecord[User] with MegaProtoUser[User] {
  def meta = User // what's the "meta" server
  protected def userFromStringId(id: String): Box[User] = meta.find(id)

  protected def findUserByUniqueId(id: String): Box[User] =  {
    var searchListHeadOption = meta.findAll("_id",id).headOption
    searchListHeadOption match {
      case Some(x) => Full(x)
      case None => return Empty
    }
  }
  /**
   * Given an username (probably email address), find the user
   */
  protected def findUserByEmail(email: String): Box[User] = {
    var searchListHeadOption = meta.findAll("email",email).headOption
    searchListHeadOption match {
      case Some(x) => Full(x)
      case None => return Empty
    }
  }


  protected def findUserByUserName(email: String): Box[User] = findUserByEmail(email)

  override def valUnique(errorMsg: => String)(emailValue: String) = {
    meta.findAll("email",emailValue) match {
      case Nil => Nil
      case usr :: Nil if (usr.id == id) => Nil
      case _ => List(FieldError(email, "The email should be unique"))
    }
  }

  // define an additional field for a personal essay
}

При входе в систему введенный пароль сопоставляется с хешированным паролем из БД.Я застрял на этом этапе.

Любая помощь будет оценена.

Спасибо!

1 Ответ

1 голос
/ 18 июля 2011

Я видел похожую проблему с лифтом , касающуюся Открытого поля пароля для записи.Надеюсь, это поможет!

...