2

私はこのライブラリで遊んでいますが、これは絶対に素晴らしいです。私はそれをテストしていましたが、アクティブ化されていないユーザーがログインしようとすると問題があると思います。何が起こるかというと、ユーザーは send_again ページにリダイレクトされますが、一度リダイレクトされると、URL を他の場所に変更することはできなくなります。これは、ログイン機能で破壊されていないセッション情報が原因で発生すると推測しています。

elseif ($this->tank_auth->is_logged_in(FALSE)) {
// logged in, not activated
redirect('/auth/send_again/'); 

これは常に実行されます (強制的にログアウトしない限り)。これを修正する方法を知っている人はいますか?ありがとう!

4

3 に答える 3

1

クライアントのサイトでこのバグを見つけました。ログアウトを強制すると解決するようです。そのため、アクティベーションリンクを送信した直後に、関数再送信関数に強制ログアウトを入れました。

作業コードは、application/controllers/auth.php で次のようになります。

    function send_again()
    {
    if (!$this->tank_auth->is_logged_in(FALSE)) {                           // not logged in or activated
        redirect('/auth/login/');

    } else {
        $this->form_validation->set_rules('email', 'Email', 'trim|required|xss_clean|valid_email');

        $data['errors'] = array();

        if ($this->form_validation->run()) {                                // validation ok
            if (!is_null($data = $this->tank_auth->change_email(
                    $this->form_validation->set_value('email')))) {         // success

                $data['site_name']  = $this->config->item('website_name', 'tank_auth');
                $data['activation_period'] = $this->config->item('email_activation_expire', 'tank_auth') / 3600;

                $this->_send_email('activate', $data['email'], $data);

                $this->_display_message(sprintf($this->lang->line('auth_message_activation_email_sent'), $data['email']));

                /* 
                 * Force a logout here or tank_auth remains 
                 * stuck in the resend mode.
                 */ 
                $this->tank_auth->logout();

            } else {
                $errors = $this->tank_auth->get_error_message();
                foreach ($errors as $k => $v)   $data['errors'][$k] = $this->lang->line($v);
            }
.....

私が知る限り、これは単なるハックですが、問題は解決しました。このサイトの作成者が tank_auth アクションで何かを変更したかどうかはわかりません。

他の人にも役立つことを願っています。

于 2013-03-20T03:11:43.813 に答える
1

\controllers\auth.php 関数ログインのリダイレクト値を削除して、これを見つけてください:

elseif (isset($errors['not_activated'])) {              
redirect('');//auth/send_again/ 
}

send_again 関数は、ユーザーがアクティブ化されていないときに常に呼び出されます。したがって、 send_again 関数を渡すには、リダイレクト値を削除するだけです

電子メールの有効化を有効にする場合は、config フォルダーで email.php を構成する必要があります。

于 2012-08-27T04:34:44.743 に答える
0

ねえ、これはいつも私のために働いています:

if( !$this->tank_auth->is_logged_in() ){
   // not logged in
} else {
   // logged in
}

状態の強打に注意してください

于 2011-04-30T18:07:06.783 に答える