php - 登录后重定向到原始页面(Codeigniter)

标签 php jquery codeigniter session tankauth

整个网站需要用户登录才能查看页面。如果用户未登录,他将被重定向到登录/注册页面。

问题:当未登录的用户输入 http://www.domain.com/listings/1234 这样的网址时,他将被显示该页面,但有一个黑色页面,阻止用户与该页面交互(jQuery 的东西,这里不是问题),以及一个弹出模式框,其中包含指向(Tank Auth)登录页面的链接 http://www.domain.com/login.

从登录页面登录后,用户将被重定向回登录后通常看到的页面,即:http://www.domain.com,但该页面已通过变量1234

简而言之:我希望尚未登录并已进入 http://www.domain.com/listings/1234 网站的用户 < em>尚未被重定向到http://www.domain.com/login尚未,而是保留在http://www。 domain.com/listings/1234 并显示一个模式框,其中包含登录页面 http://www.domain.com/login 的链接,如果他登录,他将被重定向回 http://www.domain.com/,而不是登录后获得的通常页面,并传递变量 1234

如何使用 Codeigniter 来完成此操作?

这就是我现在拥有的:

列表 Controller

function index(listing_id) {
    $this->load->module('auth');
    if(!$this->auth->tank_auth->is_logged_in()) {
         redirect('login');
    } 

    // Some calls to database etc here...

    $this->load->view('listings', $data);

}

最佳答案

有多种方法可以解决您的问题。希望这个解决方案能够提供一些关于如何实现这一目标的想法。

下面的解决方案使用 jquery ui 对话框来显示模式,并使用 jquery .ajax 来处理登录表单提交。

有条件地将此代码放在页面底部 </body> 之前如果用户未登录,则标记。

<?php if($this->auth->tank_auth->is_logged_in()){ ?>
    <div id="dialog-wrap" class="modal" >
    <?php echo $this->load->view('login_form'); ?>
    </div>
    <script>
        $('#dialog-wrap').modal({
            modal: true,
            autoOpen: true,
        });

        $('#login-form').submit(function(){
            //use .ajax to submit login form and check credentials.
            $.ajax({
                type: 'POST',
                url: <?php echo base_url(); ?>"login.php",
                data: "username="+$('username').val()+'&password='+$('password').val(),
                dataType: 'json',
                success: function(returnData){.
                    if(returnData.status){
                        //close modal box
                    }else {
                        //display message that login failed.
                    }
                }
            });

        });
    </script>
?>

你的ajax登录 Controller

function login(){

  //Use tank auth to validate login information.

  if(authentication is successful) {
    $return_data = array(
        'status'    => true,
        'msg'           => 'Login Successful'
    );
  }else {
        $return_data = array(
        'status'    => false,
        'msg'           => 'Login failed'
    );
  } 

  //Use echo instead of return when you are sending data back to an jquery ajax function.
  echo json_encode($data);
}

如果你这样做,那么你就不必依赖 codeigniter 重定向,一切都将通过 ajax 处理。

我希望这能让您了解如何处理这个问题。

关于php - 登录后重定向到原始页面(Codeigniter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8625556/

相关文章:

php - 将变量传递给另一个 PHP 文件并执行它

jquery - 正在寻找一种效果,但不知道它的名称,所以我无法真正搜索它

javascript - jQuery :[] selector?

jquery - 选择表单中的文本框

php - 我如何获取数据库更新行中的最后一个 id?

php - Laravel 5.5 质量分配异常

php - htmlspecialchars() 期望参数 1 为字符串,Laravel 中给出的数组

PHP数组数组存储mysql数据

php - 将数据插入 decimal(12,2) 类型的数据库表字段

php - 代码点火器 : search pagination not limit by post method?