2015-07-29 7 views
0

Я пытался много разных вещей, чтобы получить эту работу, и это то, что я в настоящее время:Codeigniter 3 вернуться на предыдущую страницу после авторизации

// save the redirect_back data from referral url (where user first was prior to login) 
    $this->session->set_userdata('redirect_back', $this->agent->referrer()); 

// user is authenticated, lets see if there is a redirect: 
     if($this->session->userdata('redirect_back')) 
     { 
      $redirect_url = $this->session->userdata('redirect_back'); // grab value and put into a temp variable so we unset the session value 
      $this->session->unset_userdata('redirect_back'); 
      redirect($redirect_url, 'refresh'); 
     } 
     else 
     { 
      redirect('/', 'refresh'); 
     } 

Проблема с этим не иногда нет URL перехода. Например, я разрешаю загрузку видео/изображений. Если пользователь находится на домашней странице, и они нажимают кнопку «Добавить видео», и они не регистрируются в ней, перенаправляет их на страницу входа в систему и обновляется, и больше нет реферального URL-адреса. Я хочу, чтобы пользователь перенаправлялся обратно на страницу загрузки видео, потому что они пытались получить доступ к этой странице, но не могли, потому что они не вошли в систему.

Знаете ли вы, почему это происходит?

+0

Вы можете использовать функцию 'current_url()' из помощника URL. – Tpojka

+0

поэтому заменил бы '$ this-> agent-> referrer()' на 'current_url()'? – iamthestreets

+0

Я бы попробовал это в настройке сеанса. Это текущий контроллер/метод url. – Tpojka

ответ

0

Вы можете решить это в конструкторе для каждого контроллера зарегистрированных областей. Например:

public function __construct() { 
    parent::__construct(); 
    /* 
    * First check to see if they are logged in 
    * if not redirect to login in page with 
    * redirect back information 
    */ 
     if (!$this->session->userdata('uid')) { 
      redirect(base_url() . 'login?ref=account'); 
     } else { 
      /* 
      * if they are logged in, load helpers, models, libs 
      * and proceed with viewing normally 
      */ 
       $this->load->helper('form'); 
       $this->load->library('form_validation'); 
       //etc. 
     } 
} 

Здесь я использую строку запроса, но вы можете так же легко использовать сегменты uri. Контроллер входа в систему затем берет строку запроса и после успешного входа использует ее для отправки. Преимущество в том, что они всегда перенаправляются обратно туда, куда вы хотите, чтобы они шли, потому что вы всегда знаете, где они были основаны на вашем явном коде. Недостатком является его немного больше обслуживания, поскольку вы должны убедиться, что все «защищенные» области имеют соответствующие параметры перенаправления. Вы можете сделать это более гибким, используя current_url(), как было упомянуто в комментариях. Вам также приходится иметь дело с данными в URL-адресе, с которым может взаимодействовать пользователь, но если вы все правильно разработали, это не должно быть большой проблемой. Мне нравится этот метод, потому что он явно меня контролирует поток, и я могу настроить каждый контроллер, чтобы идти туда, куда я хочу, и вернуться туда, где хочу.

Смежные вопросы