代码之家  ›  专栏  ›  技术社区  ›  Sachin Sarola

在codeigniter中第二次出现csrf令牌问题时,AJAX无法工作

  •  2
  • Sachin Sarola  · 技术社区  · 8 年前

    我的ajax调用第一次起作用,但第二次不起作用,返回类似。。不允许您请求的操作。 控制台标题中的状态代码为403禁止

    控制器 方法如下:。。

    public function authenticate() {
        echo json_encode('sachin');
    }
    

    jQuery 作用

    $("#adminFrmSubmitBtn").on('click',function(){
        if($("#admin_login_frm").valid()){
            var frmData=$(this).closest('form').serialize();
            frmData+='&'+$.param({'<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>'});
            $.ajax({
                url:'<?php echo base_url('login/authenticate12'); ?>',//$(this).closest('form').attr('action'),
                method:$(this).closest('form').attr('method'),
                data:frmData,
                success:function(response){
                    console.log(response);
                }
            });
        }else{
            return false;
        }
    });
    

    Html 密码

    <form action="<?php echo base_url('login/authenticate'); ?>" method="post" name="admin_login_frm" id="admin_login_frm">               
          <input type="text" name="user_name" class="form-control" placeholder="Email">
          <input type="password" name="user_password" class="form-control" placeholder="Password">
          <button type="button" class="btn btn-primary btn-block btn-flat" >
    </form>
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Mukund Bhut    8 年前

    获取新的CSRF代币。我们必须使用Javascript获取cookie,因为Codeigniter正在cookie中存储CSRF令牌。

    在视图(.php)文件中放入以下代码。

        <script type="text/javascript">
    
        function get_cookie(cname) {    //using this function we can get cookie
           var name = cname + "=";
           var ca = document.cookie.split(';'); 
           for(var i=0; i<ca.length; i++) {
              var c = ca[i];
              while (c.charAt(0)==' ') c = c.substring(1);
              if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
          }
          return "";   
       }
    
        $.ajax({
            type: "POST",
            url: "YOUR-URL",
            data: {"<?php echo $this->security->get_csrf_token_name(); ?>":csrf_token}, //Add your data which you want to post
            dataType: "json",
            success: function(resp){            
            },
            error: function(jqXHR, textStatus, errorThrown){
                alert('Something is wrong');
                window.location.reload();
            }
        }); 
    
    </script>
    
    推荐文章