2

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

问题:当一个没有登录的用户输入一个类似的 urlhttp://www.domain.com/listings/1234时,他会看到那个页面,但是页面变暗了,阻止用户与页面交互(jQuery 的东西,这里不是问题)和一个弹出窗口带有指向(Tank Auth)登录页面链接的模式框http://www.domain.com/login

从登录页面登录后,用户将被重定向回登录后的常用页面,即:http://www.domain.com但该页面传递了变量1234.

简而言之:我希望尚未登录并进入网站的用户http://www.domain.com/listings/1234不会重定向到,而是保持打开状态并显示一个带有登录页面链接的模式框,如果他登录,他将被重定向回而不是他在登录后获得的通常页面并被传递变量。http://www.domain.com/login http://www.domain.com/listings/1234http://www.domain.com/loginhttp://www.domain.com/1234

如何使用 Codeigniter 做到这一点?

这就是我现在所拥有的:

列表控制器

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);

}
4

1 回答 1

2

有几种方法可以完成您的问题。希望这个解决方案能够就如何实现这一点提供一些想法。

下面的解决方案使用 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 登录控制器

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 处理。

我希望这能让你知道如何处理这个问题。

于 2011-12-24T16:22:56.307 回答