0

Codeigniter と Jquery を使用して Ajax ログインを構築しています...「無効なログイン」メッセージが返され、それが私を悩ませているという小さな問題があります。

ログインページには次のものがあります。

$(document).keypress(function (e) {
    if (e.which == 13) {
        var login = $("#login").val();
        var pass = $("#pass").val();

        $('#login-block').removeBlockMessages().blockMessage('Please wait, cheking login...', {
            type: 'loading'
        });
        $.post("<?php echo base_url(); ?>index.php/login/validate_credentials/", {
            username: login,
            password: pass
        }, function (data) {
            if (data.error) {
                $('#login-block').removeBlockMessages().blockMessage(data.message, {
                    type: 'error'
                });
            } else {
                document.location.href = data.redirect;
            }
        }, "json");
    }
});

このvalidate()関数は、単純にデータベースにユーザー名とパスワードの一致を照会します。num_rows = 1 の場合、ユーザー データを返します。

ログインしようとすると、これはすべて正常に機能しますが、存在しないユーザー名を入力すると、「不正なログイン」エラーが発生しません...

実際のユーザー名と偽のパスワードを使用すると、エラーが発生します。

ユーザー名とパスが正しければ、正常にログインします。

ユーザー名が存在しない場合に表示されず、エラーになる理由がわかりません。

編集

これがモデルの Validate() 関数です。

function validate() {

    // CHECK LOGIN DETAILS
    $this->db-> select('first_name,last_name,usertype,id,products,mac');
    $this->db-> where('username', $this->input->post('username'));
    $this->db-> where('password', md5($this->input->post('password')));
    $query = $this->db->get('membership');

    if ($query->num_rows() > 0) {
        $data = array('usertype' => $row->usertype, 'userid' => $row->id, 'first_name' => $row->first_name, 'last_name' => $row->last_name, 'products' => $row->products, 'mac' = > $row->mac);
        return $data;
    }
}
4

2 に答える 2

0

で修正しました

$.getJSON('<?php echo base_url(); ?>index.php/login/validate_credentials/',{username: login, password: pass}, function(data) {
if(data.error){
$('#login-block').removeBlockMessages().blockMessage(data.message, {type: 'error'});   
} else {
document.location.href = data.redirect;
}
});

postの代わりにgetJSONを使用する必要がありました。変数のpostではなくgetを使用するように、モデル関数を更新する必要がありました。今では思った通りに動作します。

于 2012-10-08T14:34:53.673 に答える
0
if(data.error){
    $('#login-block').html('<p>'+data.message+'</p>);
} else {
    document.location.href = data.redirect;
}

それを試してみてください。

if($query->num_rows()==1)
{
$data2 = array(
    'error' => false,
    'redirect' => base_url().'index.php/site/home/'
    );

わかりました、それはどうですか?ログイン時には、常に num_rows = 1 であることを確認する必要があります。

于 2012-10-08T11:56:38.090 に答える