2010-11-10 7 views
0

J'ai développé un login en utilisant codeigniter, mais j'ai ce problème lorsque vous vous connectez, n'importe qui peut taper une autre adresse dans une autre adresse et aller à un autre compte. comment éviter cela? s'il vous plaît instruisez-moi?connexion en utilisant codeigniter

regrards, Rangana

+0

Il y a probablement un problème avec votre approche de codage. Vous devriez limiter l'accès à l'utilisateur qui est en fait connecté. Montrez-nous du code. –

+0

J'ai fourni le code ci-dessous ... –

Répondre

2

j'ai travaillé deux approches avec l'authentification des utilisateurs dans CI

vous pouvez le faire sur une base par page, via le __construct() fonction, vérifiant si l'utilisateur est connecté et les redirigeant en conséquence. Alternativement, vous pouvez étendre les contrôleurs de base de sorte que vous ayez (par exemple) un contrôleur régulier, pour les pages qui ne nécessitent pas d'authentification, un contrôleur "Public" qui vous oblige à être connecté, et un contrôleur "Admin" permet seulement certains types d'utilisateurs.

Je me réfère à nouveau à Phil Sturgeon pour cette - extending base controllers

je recommande aussi regarder certaines bibliothèques Auth - Ion Auth et Tank Auth sont généralement reconnus comme très bon - mais il y a beaucoup disponibles.

Votre fonction est également assez limitée - l'utilisateur ne peut jamais faire qu'une seule option (principale).

La meilleure approche est

<?php 

class Foo extends Controller { 

    function __construct() 
    { 
     $is_logged_in = $this->session->userdata('is_logged_in'); 

     if(!isset($is_logged_in)||$is_logged_in!= TRUE) 
     { 
      redirect('login'); 
     } 
    } 
    // else, logged in..proceed 
} 

par exemple.

+0

merci beaucoup pour la réponse détaillée et les suggestions ... je vais passer par eux! –

1

Vous devrez créer une session après que les utilisateurs connectés par exemple obtient spécifié les informations d'identification correctes. Une fois que vous avez fait cela, vous devrez mettre en place une vérification de session sur chaque page qui doit être consultée uniquement par les utilisateurs connectés.

Jetez un oeil à Session Class CI pour plus d'informations.

+0

mais j'ai utilisé la classe session dans mon code? Voici le code, ci-dessous de votre message, y at-il quelque chose de mal? :( –

+0

@rangana: Votre code semble correct, mais assurez-vous que vous définissez la session pour '$ this-> session-> userdata ('is_logged_in')' au moment de la connexion de l'utilisateur. – Sarfraz

0
function index() 
{ 
    $this->is_logged_in(); 
} 

function is_logged_in(){ 
    $is_logged_in = $this->session->userdata('is_logged_in'); 

    if(!isset($is_logged_in)||$is_logged_in!= TRUE){ 
     echo 'you are not logged in '; 
     echo anchor('login_controller','Login'); 
    }else{ 
     $this->main();  
    } 
} 

c'est la manière dont je codé la connexion

+0

Ne pas poster plus d'info comme une réponse .ajouter juste à votre question originale s'il vous plaît – Matthew

+0

ok je ferai comme ça ...! –

1

Vous avez dit:

j'ai ce problème lorsque loged dans tout le monde peut saisir une autre adresse dans une autre adresse et aller à un autre compte

Si je comprends bien, lorsque vous validez les informations d'identification de un utilisateur que vous ne stockez pas dans votre session l'identifiant de cet utilisateur.

Vous devez stocker l'ID dans chaque session pour savoir qui consulte chaque page et ce que vous devez lui montrer.

Controller Exemple:

function validate_credentials() { 
    $this->load->model('users_model'); 
    if($this->users_model->check_pass() == true) { 
     $data = array(
      'email' => $this->input->post('email'), 
      'is_logged_in' => true, 
      'user_id' => $this->users_model->get_userid() 
      ); 
     $this->session->set_userdata($data); 
    } 
} 

Modèle Exemple:

function get_userid() { 
    $this->db->where('email', $this->input->post('email')); 
    $q = $this->db->get('users'); 
    $r = $q->row(); 
    return $r->id; 
} 

Maintenant, vous pouvez charger le contenu dynamique en fonction de $ this-> session-> userdata ('user_id') ; et détermine ce qu'ils devraient voir sur chaque page.

PS: Si vous voulez avoir des rôles que vous ne devez stocker le rôle d'utilisateur dans la session d'ajouter une autre touche « » => « val »

Espoir qui aide.

+0

merci beaucoup pour l'explication détaillée, c'est utile aussi! –

Questions connexes