重定向笨登录后(Redirect in codeigniter after login)

2019-10-16 22:57发布

尝试登录成功后做重定向。 登录信息使用AJAX发送到控制器。

下面我控制器代码

public function login_controller_function()
{
    $this->load->model('login_model');
    if ($this->input->is_ajax_request())
    {
        $user_name=$this->input->post('username');
        $user_password = $this->input->post('password');
        $this->load->helper('url');
        $result = $this->login_model->verify_user($user_name,$user_password);
        //  echo 'user_logged_in';
        if(strcmp($result,'user_logged_in')==0)
        {
            redirect('welcome');

        }
    }
}

但它不工作。 任何人都知道什么是错?

大家好,我的HTML的要求。 我使用Twitter的引导,以及

<li class="divider-vertical"></li>
<li><a href="#" id="login_btn">Login</a></li>
<li><a href="<?php echo base_url('register'); ?>">Register</a></li>

的按钮所以当我点击登录按钮,模态窗口将出现,并要求登录信息。

所以,当我登录按钮点击,我的js代码会发送一个Ajax请求

下面我的js代码

    /*Attempt register user jquery ajax*/
    $('#login').click(function(){ 

        var user_name = $('#loginHere').find('#user_name').val();

        var user_password = $('#loginHere').find('#login_pwd').val();

        if(user_name==""||user_password=="")
            return;

        var login_data = { username:user_name, password:user_password};


                $.ajax({
        type: "POST",
        dataType: "json",
        async: false,
        url:"login_register/login_controller_function",
        data: login_data,
        success: function(data) {
            if(data.login)
            {
                alert(data.redirect);
                window.location.replace(data.redirect);

            }
            else if(!data.login)
            {
                alert('data login not true');
            }
        },
        error:function(data){
            alert('ajax error');
        }
    });
    });
});

Answer 1:

当你正在使用AJAX调用控制器的方法,你需要回发回一些变量或值(表示成功或不成功的登录),以这使得AJAX调用来处理JavaScript中的redirect.Or换句话说,JavaScript的应该处理重定向因为你没有直接张贴到控制器的方法进行调用到控制器,而是通过AJAX。

什么是AJAX脚本将作为响应登录后Ajax调用,然后重定向到welcome控制器输出到控制器方法重定向,这不是处理Ajax调用正确的方式在页面完整的HTML。

所以我建议,你倒是应该设置一些会话值在控制器后登录成功,有的值发送回AJAX方法来指示IOF登录成功或失败。

然后,您可以使用JavaScript重定向,你应该有你安顿由JavaScript重定向到安全页面设置会话。

控制器:


public function login_controller_function(){
$this->load->model('login_model');
if ($this->input->is_ajax_request())
{
    $user_name=$this->input->post('username');
    $user_password = $this->input->post('password');
    $this->load->helper('url');
    $result = $this->login_model->verify_user($user_name,$user_password);
    //  echo 'user_logged_in';
    if(strcmp($result,'user_logged_in')==0)
    {
     //set the session variables here so that I can access the secure area 

     //send back response to the ajax method  
     print 'success';

    }else{
        //send back response to the ajax method
        print 'failure';
    }
}

}

AJAX脚本:


$.ajax({
       type: "POST",
       url: "<?php echo base_url();?>index.php/login/login_controller_function",
       data: "userName="+$('#userName').val()+"&passWord="+$('#password').val(),
       cache:false,
       success: function(msg)
           {            
            if(msg =='success'){
            //redirect to dashboard
            }
            if(msg == "failure"){
            //display login error message               
           }
     });

这是一个基本的例子事情应该如何工作。 你当然也可以扩展它或使其更加坚固。



文章来源: Redirect in codeigniter after login