Dans le système de messagerie de mon projet, lorsque vous recevez un message d'un utilisateur, vous recevez une alerte par courrier électronique indiquant qu'un autre utilisateur a envoyé un message pour afficher le message. Cliquez ici (c.-à-d. L'URL du message). Si l'utilisateur n'est pas connecté au système il est redirigé vers la page de connexion et, une fois connecté, il devrait revenir à l'URL du référent. J'ai créé un contrôleur de base dans le dossier principal et l'extension du code d'authentification de CI_controller est la suivante.
function authenticate($type = 'user')
{
if($type == 'user')
{
if($this->user_id)
{
// user is logged in. check for permissions now
}
else
{
// user isnt logged in. store the referrer URL in a var.
if(isset($_SERVER['HTTP_REFERER']))
{
$redirect_to = str_replace(base_url(),'',$_SERVER['HTTP_REFERER']);
}
else
{
$redirect_to = $this->uri->uri_string();
}
redirect('user/login?redirect='.$redirect_to);
exit;
}
}
if($type == 'admin')
{
if($this->session->userdata('admin_id') && $this->session->userdata('user_type') ==5)
{
// Admin is logged in
}
else
{
redirect('admin/login');
exit;
}
}
}
L'URL du référent est "http://example.com/project/pm/view_conversation?id=11"now. Le problème est que je suis en train d'obtenir l'URL du référent jusqu'à view_conversation et que je ne parviens pas à obtenir la partie id.
Toute suggestion ?
Je vous remercie.
Cela peut aider:
CI 2 + https://www.codeigniter.com/userguide2/libraries/user_agent.html
CI 3 + http://www.codeigniter.com/user_guide/libraries/user_agent.html
$this->load->library('user_agent');
if ($this->agent->is_referral())
{
echo $this->agent->referrer();
}
Que diriez-vous juste
redirect($_SERVER['HTTP_REFERER']);
Utilisation de la variable $_SERVER
global de php.
Cela a fonctionné pour moi!
Mettez ce code dans votre contrôleur de connexion
function index() {
$this->load->library('user_agent'); // load user agent library
//Set session for the referrer url
$this->session->set_userdata('referrer_url', $this->agent->referrer() );
}
Après le code de redirection de connexion
// user is authenticated if referrer is there
if( $this->session->userdata('referrer_url') ) {
//Store in a variable so that can unset the session
$redirect_back = $this->session->userdata('referrer_url');
$this->session->unset_userdata('referrer_url');
redirect( $redirect_back );
}
Comme vous avez un double point d'interrogation dans l'URL, le navigateur ignore la partie de l'URL après la seconde. Utilisez urlencode pour vous rediriger une partie, comme ceci:
redirect('user/login?redirect='.urlencode($redirect_to));
Je l'ai testé et ça marche comme ça.
Par défaut, CI est configuré pour ignorer la partie requête de l'URL (la partie après le '?').