1

CodeIgniter + Tank Auth を使用しています。コードhttp://localhost/XXXXXXXX/auth/forgot_password のみが機能しません。結果は常に次のとおりです。

登録とアクティベーションは問題ありません。

4

4 に答える 4

4

考えられる問題:

  • Cookie が正しく設定されていません。Cookie の設定を確認し、テストを行って Cookie の設定と読み取りができることを確認します。(リセットにCookieを使用しないと無効になる場合があります)
  • リセット パスワード キーの有効期限が切れているか、正しく設定されていません。リンクをたどる前にデータベースをチェックして hte 値が正しいかどうかを確認$config['forgot_password_expire']し、Tank Auth をチェックしてください。
  • メール内の間違った URL にリンクしている可能性があります。これは正しくありません:

    http://localhost/XXXXXXXX/auth/forgot_password

    次のようになります。

    http://localhost/auth/forgot_password/XXXXXXXX

Tank Auth の使用を思いとどまらせるわけではありませんが、使用した後、まだ初期段階にある場合は、Ion_Authを試すことをお勧めします。PyroCMSでも同様に使用されていると思います。

于 2011-05-07T10:57:43.580 に答える
2

URL の XXXXXXXX が /auth/ の前に余分な URI セグメントがあることを示している場合は、これを変更する必要があります。

function reset_password()
{
    $user_id = $this->uri->segment(3);
    $new_pass_key = $this->uri->segment(4);

これに:

function reset_password()
{
    $user_id = $this->uri->segment(4);
    $new_pass_key = $this->uri->segment(5);

$this->uri->segment() の異なる数値に注意してください。/auth/ の前に追加のセグメントがあると、ユーザー ID とアクティベーション コードは、(Tank Auth が想定する 3 番目と 4 番目ではなく) 4 番目と 5 番目のセグメントでパラメーターとして渡されます。

于 2011-07-13T23:31:43.833 に答える
1

ユーザーモデル関数「can_reset_password」のデータベースのタイムスタンプである可能性があります UNIX_TIMESTAMP(new_password_requested) を使用します

$user_id と $new_pass_key が正しい場合は echo できますが、問題は時間の比較にあります。URL を修正して、常に最後の 2 つのセグメントを取得する

$break =$this->uri->total_segments();
$new_pass_key= $this->uri->segment($break);
$user_id= $this->uri->segment($break-1);

タイムスタンプについては、ユーザーモデルの関数 reset_password でこれを試してください

function reset_password($user_id, $new_pass, $new_pass_key, $expire_period = 900)
{
    $this->load->helper('date');
    $this->db->set('password', $new_pass);
    $this->db->set('new_password_key', NULL);
    $this->db->set('new_password_requested', NULL);
    $this->db->where('id', $user_id);
    $this->db->where('new_password_key', $new_pass_key);
    $this->db->where('UNIX_TIMESTAMP(new_password_requested) >=',mysql_to_unix( time() - $expire_period));

    $this->db->update($this->table_name);
    return $this->db->affected_rows() > 0;
}
于 2012-02-04T17:02:04.980 に答える
1

メインの index.php では、タイム ゾーンを定義する必要があります。例:

date_default_timezone_set('Europe/Paris');

これにより、次のチェックですべての日付が同じタイムゾーンであることが保証されます

$this->db->where('UNIX_TIMESTAMP(new_password_requested) >', time() - $expire_period);
于 2012-09-30T05:18:50.770 に答える