タンク認証がパスワードを忘れた

codeigniter tankauth
タンク認証がパスワードを忘れた

CodeIgniter + Tank Authを使用します。 コードhttp:// localhost / XXXXXXXX / auth / forgot_passwordのみが機能しません。 結果は常に次のとおりです。「アクティベーションキーが間違っているか、有効期限が切れています。 もう一度メールを確認し、指示に従ってください。」

登録とアクティベーションは大丈夫です。

  1  1


ベストアンサー

考えられるいくつかの問題:

  • Cookieが正しく設定されていません。 Cookieの設定を確認し、
    テストを実行して、Cookieを設定して読み取ることができることを確認してください。 (Cookieがリセットに使用されない場合、これは無効になる可能性があります)

  • リセットパスワードキーの有効期限が切れているか、正しく設定されていません。 をチェック
    データベースをリンクする前にhte値が正しいかどうかを確認し、Tank Authで$ config [‘forgot_password_expire’] `を確認します。

  • メールの間違ったURLにリンクしている可能性があります。 これは見えない
    右:+ http:// localhost / XXXXXXXX / auth / forgot_password 次のようになります:` http:// localhost / auth / forgot_password / XXXXXXXX`

Tank Authを使用することを思いとどまらせることはありませんが、まだ使用している場合は、まだ初期段階にある場合はhttps://github.com/benedmunds/CodeIgniter-Ion-Auth[Ion_Auth]を試すことをお勧めします。 クレジットが追加される場合は、http://pyrocms.com/ [PyroCMS]でも使用されていると思います。

4


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番目のセグメントのパラメーターとして渡されます。

2


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

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

$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;
}

1


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

date_default_timezone_set('Europe/Paris');

これにより、次のチェックに同じタイムゾーンのすべての日付が含まれるようになります

$this->db->where('UNIX_TIMESTAMP(new_password_requested) >', time() - $expire_period);

1


タイトルとURLをコピーしました