0

CodeIgniter と jQuery でユーザー認証をしようとしています。ユーザーが間違ったユーザー名またはパスワードを入力すると、ログインページに残り、jquery を使用すると、間違ったユーザー名またはパスワードを入力したという通知が表示されます。

私の問題は成功です。つまり、彼が正しいユーザー名とパスワードを入力すると、単純なjavascriptリダイレクトでログインページにユーザーを送信できますが、それは私が望むものではありません。JavaScript で単純なリダイレクトを使用すると、他のすべてのページでのログイン後にユーザーを追跡する必要があるユーザー セッション データを入力できません。

可能であれば、ユーザーが正しいユーザー名とパスワードを入力した場合、jqueryは何もせず、ユーザーが間違ったユーザー名またはパスワードを入力した場合にのみ機能をアクティブにすることを望みます。

これが私が持っているコードです。最初に JS コード:

 formLogin.on('submit', function(e) {    
    e.preventDefault();
    $.ajax({
    type     : 'POST',
    url      : 'loginCheck',
    data     : formLogin.serialize(),
    dataType : 'json',
    success  : function(r) {


        if (r.status) {
            // this works, but I would like this part to do nothing
            // just to leave my PHP controller to redirect the user
            window.location = 'http://www.linkedin.com';

        } else {
            $('#errorMessageTop').fadeIn();

        }

    }
});

});

コントローラのコードは次のとおりです。

public function loginCheck()
    { 

       // set the validation rules
        $this->form_validation->set_rules('username', 'Username', 'required|trim|encode_php_tags');
        $this->form_validation->set_rules('password', 'Password', 'required|trim|encode_php_tags');
        $this->form_validation->set_error_delimiters('<br /><p class=jsdiserr>', '</p><br />');
        if ($this->form_validation->run() != FALSE) 
        {

            $ids=array();
            $ids[0]=$this->db->where('username', $this->input->post('username'));
            $ids[1] = $this->db->where('password', md5($this->input->post('password')));
            $query = $this->backOfficeUsersModel->get();

            if($query)
                {
                    $data = array(
                    'username'       => $this->input->post('username'),
                    'isUserLoggedIn' => true
                    ); 
                $isAuthenticated = true;
                if ($isAuthenticated) {
                 $return['status']  = true;
                $return['message'] = 'You have successfully been logged in!'; 
                exit(json_encode($return)); 
                 $this->session->set_userdata($data);
                $data['title'] = "Welcome to dashboard!";
                $data['main_content'] = 'dashboard';
                $this->load->vars($data);
                $this->load->view('backOffice/template');


                }

        } else {   

                $return = array(
                'status'  => false,
                'message' => 'Wrong Username or Password'
                );
                 exit(json_encode($return));

        }
        } else {

             $errorMessage = "Second Message Wrong username or pwd...!";
             $errorMessage = json_encode($errorMessage);

        }



    } // end of function loginCheck 

どんな助けでも大歓迎です。

よろしく、ゾラン

===============

コントローラーからの新しいコード:

public function loginCheck()
    { 

       // set the validation rules
        $this->form_validation->set_rules('username', 'Username', 'required|trim|encode_php_tags');
        $this->form_validation->set_rules('password', 'Password', 'required|trim|encode_php_tags');
        $this->form_validation->set_error_delimiters('<br /><p class=jsdiserr>', '</p><br />');
        if ($this->form_validation->run() != FALSE) 
        {

            $ids=array();
            $ids[0]=$this->db->where('username', $this->input->post('username'));
            $ids[1] = $this->db->where('password', md5($this->input->post('password')));
            $query = $this->backOfficeUsersModel->get();

            if($query)
                {
                    $data = array(
                    'username'       => $this->input->post('username'),
                    'isUserLoggedIn' => true
                    );


                $this->session->set_userdata($data);
                echo json_encode(array("success" => true));
                $data['title'] = "Welcome to dashboard!";
                $data['main_content'] = 'dashboard';
                $this->load->vars($data);
                $this->load->view('backOffice/template');


        } else {   

                echo json_encode(array("success" => false, "error" => "Wrong credentials"));

        }
        } else {

             $errorMessage = "Second Message Wrong username or pwd...!";
             $errorMessage = json_encode($errorMessage);

        }



    } // end of function loginCheck 

そしてjsコード:

  $("#formLogin").submit(function(e){
        e.preventDefault();
        var username = $(this).find("#username").val();
        var password = $(this).find("#password").val();
        var obj = {username: username, password: password};
        var url = $(this).attr("action");
        $.post(url, obj, function(r){
            if(r.success) window.location.replace('http://www.linkedin.com');
            else  $('#errorMessageTop').fadeIn();
        }, 'json');
    })
4

1 に答える 1

1

なぜ呼び出しているexit()のですか?...これにより、スクリプトが終了し、セッションが設定されなくなります。また、 に設定$isAuthenticatedtrue、すぐにそれが であるかどうかを確認していますtrue。もちろんそうなるでしょう。

これは、私がそれを処理する方法の簡素化されたバージョンです...私のコントローラーでは:

function take_creds(){

        $p = $this->input->post();
        if($p){
            $u = new User();
            $u->where("username", $p['username']);
            $u->where("password", sha1($p['password']));
            $u->get();
            if($u->exists()){
                $u->loggedin = 1;
                $u->save();

                $data = array(
                    'username' => $u->username,
                    'loggedin' => true
                );

                $this->session->set_userdata($data);
                echo json_encode(array("success" => true));
            }
            else echo json_encode(array("success" => false, "error" => "Wrong credentials"));   
        }
    }

そして対応するjQuery:

$("#login_form").submit(function(e){
            e.preventDefault();
            var username = $(this).find("#login_username").val();
            var password = $(this).find("#login_password").val();
            var obj = {username: username, password: password};
            var url = $(this).attr("action");
            $.post(url, obj, function(r){
                if(r.success) window.location.replace('home');
                else console.log("Write this error to the DOM: " + r.error);
            }, 'json');
        })
于 2012-08-25T16:25:25.993 に答える