2009-10-19 6 views
0

J'ai le scénario suivant dans zend framework:même mot de passe pour plusieurs utilisateurs dans zend

données Table des élèves Table des classes, qui contiennent de nombreux étudiants chacun. Tableau des affectations, dont chacune est affectée à une classe et un mot de passe

Je souhaite que les élèves puissent accéder à une affectation en fonction de l'ID et du mot de passe partagé de cette affectation, mais pour que l'application note quel étudiant s'est connecté à la tâche. Zend_Auth s'attend cependant à ce qu'une table contienne à la fois le nom d'utilisateur et le mot de passe, mais dans ma situation, le nom d'utilisateur se trouve dans la table des étudiants et le mot de passe se trouve dans la table des affectations.

Quelqu'un peut-il suggérer un bon moyen de gérer la connexion de l'étudiant où ils peuvent tous partager un mot de passe. Un moyen de s'authentifier avec juste un nom d'utilisateur et sans mot de passe fonctionnerait, car alors je pourrais faire la vérification de mot de passe dans un conditionnel séparé.

Répondre

1

Je pense que votre meilleur pari serait vraiment d'écrire votre propre adaptateur. Quelque chose comme cela fonctionnera très probablement:

class MyAuthAdapter implements Zend_Auth_Adapter_Interface 
{ 
    protected $_username; 
    protected $_password; 
    protected $_assignment_id; 

    /** 
    * Sets username, password, and assignemnt ID for authentication 
    * 
    * @return void 
    */ 
    public function __construct($username,$password,$assignment_id) 
    { 
     $this->_username = $username; 
     $this->_password = $password; 
     $this->_assignment_id = $assignment_id; 
    } 

    /** 
    * Performs an authentication attempt 
    * 
    * @throws Zend_Auth_Adapter_Exception If authentication cannot 
    *          be performed 
    * @return Zend_Auth_Result 
    */ 
    public function authenticate() 
    { 
     // logic here to check everything out and erturn a new Zend_Auth_Result  
    } 
} 
+0

J'ai trouvé une solution cet après-midi en utilisant des sessions, mais la vôtre semble beaucoup mieux. Je vais essayer demain. Où dois-je enregistrer le fichier php et quel devrait-il être appelé? – wheresrhys

+0

Vous pouvez l'enregistrer à peu près n'importe où. Je cours habituellement deux bibliothèques avec chaque application que j'écris avec ZF. La première bibliothèque est mon affaire avec la seconde étant appelée "App" pour les fichiers de bibliothèque spécifiques à l'application. Dans un cas comme cela, je nom le plus probablement l'adaptateur - App_Auth_Adapter et enregistrez-le dans: - Bibliothèque/App/auth/Adapter.php En supposant que vous utilisez la configuration autoloading normale est aussi simple que l'adaptateur $ = new My_Auth_Adapter ($ username, $ mot de passe, $ assignment_id); – Mike

+0

Merci beaucoup - cela a fonctionné très bien à la fin. Un peu plus de temps que je ne le pensais, car je devais écrire des versions de getResultRowObject() qui récupèrent les données utilisateur avec succès, mais qui en valent vraiment la peine pour conserver toutes les informations d'authentification en un seul endroit. À la votre – wheresrhys

0

Les mots de passe partagés sont une très mauvaise idée. Si vous partagez le mot de passe, alors un autre étudiant n'a besoin d'apprendre qu'un identifiant - généralement pas une information hautement sécurisée - pour accéder à la ressource comme l'autre étudiant. Une meilleure solution consisterait à utiliser un rôle pour contrôler l'accès aux affectations et placer les étudiants ayant besoin d'accéder à l'affectation dans le rôle. De cette façon, chaque étudiant peut toujours avoir accès à la tâche et conserver sa propre paire identifiant/mot de passe. Voir la documentation Zend pour plus d'informations sur roles and how to use them.

+0

Il y a d'autres raisons importantes pour lesquelles j'utilise un mot de passe partagé, et le contenu du site Teh est vraiment pas très sensible, donc je ne veux pas laisser tomber le fonctionnalité de mot de passe partagé. – wheresrhys

Questions connexes