mehrere UserIdentity

Hallo Leute!

Ich versuche gerade eine Webapp zu schreiben, die mehrere Authentifizierungsmethoden verwendet. Es ist so: Im Frontend sollen sich die Studierenden mit ihrer Matrikelnummer anmelden können (nur mit der Matrikelnummer). Administratoren hingegen sollen sich mit deren Email und einem vorher definierten Passwort anmelden.

Ich dachte mir ich mach einfach zwei verschiedene Klassen die von CUserIdentity abgeleitet sind und überschreibe die "authenticate()" Methode. Ich habe nun versucht AdminIdentity so zu erstellen:




<?php


/**

 * UserIdentity represents the data needed to identity a user.

 * It contains the authentication method that checks if the provided

 * data can identity the user.

 */

class AdminIdentity extends CUserIdentity

{

	/**

	 * Authenticates a user.

	 * The example implementation makes sure if the username and password

	 * are both 'demo'.

	 * In practical applications, this should be changed to authenticate

	 * against some persistent user identity storage (e.g. database).

	 * @return boolean whether authentication succeeds.

	 */

	public function authenticate()

	{

		$admin = Administrator::model()->find('LOWER(email)=?', array($this->username));

		

		if(!isset($admin))

			$this->errorCode=self::ERROR_USERNAME_INVALID;

		else if(!$admin->validatePassword($this->password))

			$this->errorCode=self::ERROR_PASSWORD_INVALID;

		else

			$this->errorCode=self::ERROR_NONE;

		return !$this->errorCode;

	}

}



Wenn ich nun aber im protected/models/LoginForm.php die AdminIdentity instanzieren will bekomm ich immer einen HTTP 500 Error.




// $this->username ist in diesem Fall die Email des Benutzers.

$this->_identity=new AdminIdentity($this->username,$this->password);



Laut Yii Framework sollte das importiert sein, denn in der /config/main.php habe ich den Import von ‘application.components.*’ drinn. Da die Klasse im Ordner ‘components’ ist sollte diese auch automatisch geladen werden.

Zusätzliche Info: Das File indem die Klasse gespeichert ist heisst: ‘AdminIdentity.php’

Kann mir jemand helfen das Problem zu lösen?

Vielen Dank schon im Voraus!

Hi und willkommen,

hmm, Fehlercode 500 wird soweit ich weiß vom Framework nirgends geworfen. In der Regel kommt das von Apache, wenn z.B. in einer .htaccess Syntaxfehler enthalten sind. Kannst du sagen, wer den Fehler erzeugt (Yii oder Apache)?

Was mir bei dem Thema noch einfällt: Ich hab gute Erfahrungen mit einer zweiten Webuser-Anwendungskomponente gemacht, die ich dann zum Authentifizieren im Adminbereich verwende. Näheres hier:

setStateKeyPrefix and auto-login in Modules - Yii Framework Forum

Was sagt denn der Stacktrace der Exception? CHttpException(500) wird IIRC bei einem PHP Fehler oder einer Exception gesendet.

Vielen Dank für deine Antwort. Ja, die Exception kam definitiv vom Apache Server. Was es genau war weiss ich leider nicht, jetzt funktionierts eigentlich wie ich wollte.

Danke noch für den Link mit dem setStateKeyPrefix, hab wie gesagt nichts mehr verändert, war aber troztdem interessant zu lesen.

Ich finde Yii ist ein geniales Framework und werde noch ein bisschen daran arbeiten es besser zu verstehen :)