Как я могу использовать 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') получает и соответствует ли что-нибудь в таблице.
Кроме того, сравнение дат не выглядит очень хорошей идеей, так как предполагает мгновенную / атомарную оценку двух различных выражений, изменяющихся во времени.
Явно нижний регистр электронной почты немного глуп, если по какой-то причине в столбце не используется сортировка с учетом регистра...