Es kommt häufig vor das Daten schon in einer anderen Anwendung oder in einer anderen Datenbank liegen. Hier ist es nicht gewünscht alle Daten in Dupal zu integrieren, zumeist soll die externe Anwendung oder Datenbank genutzt werden. Drupal bietet dafür mehrere Möglichkeiten:
- Externers Login via XML-RPC
- Dazu verbindet sich Drupal mit einem externen Server und übergibt den Nutzernamen und das Passwort. Die Anwort ist ein TRUE oder FALSE. Bei Misserfolg können auch die Fehlermeldungen des kontaktierten Servers ausgegeben werden. Genaueres ist in der Dokumentation zu drupal_xmlrpc() nachzulesen. Bei Erfolg wird der User in die Tabelle {authmap} eingetragen.
- Eigenes Script ohne User-Generierung
- Hierbei wird die Authentifizierungsabfrage in Drupal um ein eigenes Script erweitert. Drupal wird dann nur mitgeteilt ob die Authentifizierung erfolgreich ist oder nicht. Drupal legt zwar einen eigenen User dafür an, aktiviert diesen aber nicht.
- Eigenes Script mit User-Generierung
- Hierbei wird die Authentifizierungsabfrage in Drupal um ein eigenes Script erweitert. Drupal wird dann nicht nur mitgeteilt ob die Authentifizierung erfolgreich ist oder nicht, sondern es wird gleichzeitig ein eigener User angelegt und aktiviert.
Es gibt noch eine Reihe fertiger Module mit denen die Authentifizierrung erledigt werden kann, z. B. das LDAP Integration um direkt auf eine Datenbank zuzugreifen. Generell schaut Drupal nur in der eigenen Datenbanktabelle {users} nach ob dort der User existiert, der sich grade versucht einzuloggen. Wenn dieser existiert wird das Passwort geprüft und geprüft ob der User aktiviert ist. Sind diese Prüfungen erfolgreich, werden die Userdaten geladen und im User-Objekt gespeichert. Damit sind dann auch die Berechtigungen global verfügbar. Es besteht jedoch auch die Möglichkeit einen eigenen Authentifizierungs-Mechanismus einzuhängen - (hook_auth()). Der Ablauf verändert sich dann ein wenig:
- Drupal schaut in die Tabelle {users}, findet er hier den aktivierten User - alles klar, dann wird abgebrochen und der User geladen.
- Drupal schaut in die Tabelle {authmap}, findet er hier den aktivierten User - alles klar, dann wird abgebrochen und der User geladen.
- Drupal schaut ob irgendwelche Module den hook_auth implementiert haben. Wenn nicht ist hier Schluss und der User wird abgewiesen.
- Drupal fragt den hook_auth nach seinem Ergebnis. Kommt hier ein FALSE ist Schluss und der User wird abgewiesen.
- Drupal legt den User an (falls er noch nicht existiert). An diesem Punkt kann auch in das User-Objekt eingegriffen werden.
Das Ergebnis ist dass der User jetzt im System angemeldet ist. Solange er kein aktiviertes Konto hat, stehen Ihm aber nicht alle Möglichkeiten offen.
/**
* Implementation des Hook_auth
*/
function aws_auth($username, $password, $server = FALSE)
{
drupal_set_message('Authentifikation - user:'.$username.' - pw:'.$password.' ist zugelassen');
// Hier die Prüfung einbauen
$return = true;
return $return;
} // END aws_auth
Hier also ein "universeller" Bypass, der so natürlich nur lokal und nur zum Test verwendet werden sollte. Zumeist werden die Daten aus einer Datenbank geholt und Drupal mitgeteilt das der User Zugriff hat oder nicht. Wenn der User einen dauerhaften Zugriff auf das Drupal-System haben soll, besteht die Möglichkeit direkt einen Drupal-User anzulegen.
/**
* Implementation des Hook_auth
*/
function aws_auth($username, $password, $server = FALSE)
{
drupal_set_message('Authentifikation - user:'.$username.' - pw:'.$password.' ist zugelassen');
// Hier die Prüfung einbauen und die Daten holen
user_save('',
array
(
'name' => $username,
'pass' => $password,
'mail' => 'user@email.org',
'roles' => array
(2 => 'authenticated user', 3 => 'beliebige rolle'),
'status' => 1,
'init' => 'user@email.org',
)
);
$return = true;
return $return;
} // END aws_auth
Mit der Methode user_save können die Daten direkt an Drupal gegeben und der User dort angelegt werden. Wird der erste Parameter mit der $user -> uid angegeben, wird kein neuer Account angelegt sondern geprüft ob ein Account vorhanden ist und dieser bei Bedarf upgedatet. Der zweite Parameter sind die Daten aus dem User-Objekt die als Array zurückgegeben werden. Man sollte sich allerdings immer die Frage stellen ob das sinnvoll ist, denn für diesen User existieren ja dann zwei Datensätze an unterschiedlichen Orten die auch gepflegt werden müssen.
Kommentare
viagra
uafmyax viagra :-O cialis without prescription unzGC
lithobid
fquoma lithobid 4641 amoxil 2368 cialis >:-OOO generic viagra xJwQkG
Payday Loans online
ydqtvcd Payday Loans online 6969 payday loan 6353 Payday Loans 2519
cialis tadalafil
gzrafyg cialis tadalafil njOAP viagra jdhzi cialis cheap 6345 cialis 4646
generic cialis
rvzwxtu generic cialis 7907 cialis pills hyxsJS buy viagra >:-OOO buy viagra online %-[[[
payday loan
otpvggl payday loan EhNttV payday loan kYIulo payday loan %-[[[
payday loan
dehnsld payday loan =-] payday loan 0931 payday loans online iYwIz
viagra
komnyexu viagra %-[[[ viagra 7648 viagra :-O cheap viagra dtTYj viagra LdKaW
cash advance
divrsjl cash advance DVZEnr payday loans UK YiZnwS payday loans >:-OOO payday loans TaPTn
propecia
qwlutv propecia >:-[ viagra IgkPa norplant skuqY viagra sPReo ジェネリック・シアリス 5599 viagra dose :-O
accutane
inptfuds accutane 9379 cialis ssihd viagra QlWTZU propecia hajFI
cialis
nxmlamo cialis 8]]] viagra en ligne 0107 viagra >:-[ cialis :-O cialis 6518 viagra 3496
instant cash advance
wfamqq instant cash advance 0073 cash advance umFZxH payday loans 7253
auto loans online
xjqhdbhn auto loans online 6584 Payday Loan onine SZZUy bad credit payday loan HCeYO payday loan 4125