Как я могу использовать pgcrypto для входа в Postgres 9

Этот код не работает:

select * 
         from persons 
         where lower(email) = lower({email}) 
         and (password = crypt('{password}', password))
         and approved = 1
         and now() between start_date and coalesce(end_date, current_timestamp );

код, который я должен установить хэш работает нормально:

Insert into persons (
          person_id
 ,        name_first
 ,        name_last
 ,        email
 ,        phone
 ,        username
 ,        password
 ,        start_date
 ,        approved
 ,        superuser)
      values
      (
        nextval('PERSON_ID_SEQ')
 ,        {name_first}
 ,        {name_last}
 ,        {email}
 ,        {phone}
 ,        'username'
 ,        crypt('{password}', gen_salt('md5'))
 ,        now()
 ,        0
 ,        0
        )

но я не могу понять, что правильно проверяет хэш с введенным паролем. Я хочу выполнить проверку в предложении where, чтобы я мог вернуть строку лиц, когда она совпадает.

Заранее спасибо мартин

1 ответ

Сократите проблему до более мелких кусочков... посмотрите, что select select crypt('{password}', 'hello') получает и соответствует ли что-нибудь в таблице.

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

Явно нижний регистр электронной почты немного глуп, если по какой-то причине в столбце не используется сортировка с учетом регистра...

Другие вопросы по тегам