此代码不起作用:
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子句中进行检查,以便在匹配时返回persons行。
提前感谢Martin
将问题缩小。。。看看什么选择crypt("{password}"、"hello")得到你,以及表中是否有匹配的东西。
此外,日期比较看起来不是一个好主意,因为它假设对两个不同的时间变量表达式进行即时/原子求值。
除非出于某种原因该列使用了区分大小写的排序规则,否则明显降低电子邮件的大小写有点傻。。。