0

このコードは機能していません:

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句でチェックを行いたいので、一致したときに人の行を返すことができます。

前もって感謝します マーティン

4

1 に答える 1

0

問題をより小さなバイトに減らします... select crypt('{password}', 'hello') が何を取得するか、およびテーブル内の何かが一致するかどうかを確認してください。

また、日付の比較は、2 つの異なる時間変数式の瞬間的/原子的評価を想定しているため、あまり良い考えではないように見えます。

何らかの理由で列が大文字と小文字を区別する照合を使用していない限り、電子メールを明示的に小文字にするのは少しばかげています...

于 2014-10-10T20:28:19.800 に答える