如何在Codeigniter/Tank_Auth上登录时设置返回URL?

pep*_*epe 1 php login codeigniter returnurl tankauth

这里的问题是当我的用户登录我的应用程序时,它们总是被重定向到默认控制器.

我想在登录前将用户重定向到他们所在的页面.

因此,例如,如果用户正在阅读论坛帖子#12(阅读不需要登录)然后决定发布答案(回答需要登录),一旦他们登录,他们应该回到帖子#12.

我正在使用PHP/Codeigniter 2.0.2和Tank_Auth库,并且在我的几个控制器中都有

function __construct()
{
    parent::__construct();

    if (!$this->tank_auth->is_logged_in()) {
        redirect('/auth/login/');
    } else {

        //load stuff 
     }
Run Code Online (Sandbox Code Playgroud)

我的问题是

设置返回URL的最佳方法是什么(Cookie?GET?),以及如何实现?

如果您熟悉Tank_Auth,我应该在哪些文件中进行这些更改?

即使您不使用Tank_Auth,也欢迎使用任何路线图.

小智 8

我最近在我工作的网页上实现了这个解决方案.

controller/auth文件中添加对user_agent库的引用:

function __construct()
{
    parent::__construct();
    $this->load->helper(array('form', 'url'));
    $this->load->library('form_validation');
    $this->load->library('security');
    $this->load->library('tank_auth');
    $this->lang->load('tank_auth');
    $this->load->library('user_agent'); //This is the line you are adding
}
Run Code Online (Sandbox Code Playgroud)

views/auth/login_form.php中,利用CodeIgniter的user_agent库添加一个隐藏的输入标记,该标记将包含引用URL,如下所示:

<?=form_hidden('redirect_url', $this->agent->referrer());?>
<?php echo form_submit('submit', 'Let me in'); ?>
<?php echo form_close(); ?>
Run Code Online (Sandbox Code Playgroud)

之后,当用户登录数据发布登录操作时,您所要做的就是将用户重定向到名为"redirect_url"的输入内容:

/**
 * Login user on the site
 *
 * @return void
*/
function login()
{
    /*.... Beginning of the login action function...  
      ....
      ....
    */

    if ($this->tank_auth->login(
                $this->form_validation->set_value('login'),
                $this->form_validation->set_value('password'),
                $this->form_validation->set_value('remember'),
                $data['login_by_username'],$data['login_by_email'])) //valid
    {
        redirect( $this->input->post('redirect_url'));
    }
}
Run Code Online (Sandbox Code Playgroud)

这对我很有用......它很简单.我相信它可以帮到你.

让我知道任何事情.