Ich suche nach der API, mit der ich einen Benutzer anmelden kann, indem ich ihm den Benutzernamen und das Kennwort übergebe. Hat jemand Erfahrung damit?
Zur Verdeutlichung versuche ich, ein AJAX-Anmeldefeld zu erstellen, das als Popup auf der Startseite angezeigt wird, und die Seite bei falschen Anmeldeinformationen nicht zu aktualisieren, sondern nur, wenn die Anmeldung korrekt ist. Also hier ist, was ich bisher gemacht habe:
Aktualisieren
Ich lade jetzt das Anmeldeformular auf meiner Homepage und starte bei der Übermittlung eine AJAX-Anfrage, die einen Berechtigungsnachweis für dieses Skript sendet:
function user_login_submit_try() {
global $user;
$uid = user_authenticate($_POST['name'],$_POST['pass']);
$arr = array ('name'=>$_POST['name'],'pass'=>$_POST['pass']);
if ($uid){
$user = user_load($uid);
user_login_finalize($arr);
}
echo drupal_json_encode($uid);
exit;
};
Bisher funktioniert es, aber meine Sorgen sind (wie von googletorp erwähnt) Sicherheitsprobleme. Es scheint, dass keine der in diesem Skript verwendeten APIs die Daten in irgendeiner Weise bereinigt hat.
Würde jemand einen besseren Weg sehen, dies zu tun?
Antworten:
Dies könnte jemandem helfen:
Eine bessere Version basierend auf dem Kommentar:
quelle
hook_user_insert
aber die obigen Funktionen in der Antwort möchten, dass das Passwort der ursprüngliche Klartext ist. Ich denke, ich muss eshook_form_alter
stattdessen versuchen ...Dafür gibt es keine einfache API-Funktion.
Sie können tun, was Drupal tut:
Überschreiben Sie die
global $user
.Sitzungen abwickeln
Für Schritt zwei und 3 siehe
user_login_submit()
Alle diese Funktionen basieren auf dem Aufruf aus einem Formular. Der normale Ablauf besteht darin, dass die Validierungs-Handler die Benutzereingaben testen und die UID des Benutzers zurückgeben, wenn die Validierung erfolgreich ist. Der Submit-Handler übernimmt dann die eigentliche Anmeldung des Benutzers und des aufrufenden Benutzer-Hooks.
quelle
$form_state['value']['name'] = $_POST['name']
und so weiter.$form_state
Variable gibt. Es gibt viele nette Sicherheitsüberprüfungen, die Sie sonst verlieren und möglicherweise Ihre Site für Angriffe öffnen würden. Wenn Sie sich bei einem Benutzer anmelden, möchten Sie diese Sicherheit nicht verlieren.Wenn Sie das Benutzerobjekt für das Benutzerkonto abrufen müssen, für das Sie Benutzername und Kennwort kennen, können Sie den folgenden Code verwenden:
$account
Wird angezeigt,FALSE
wenn das Benutzerobjekt nicht gefunden oder geladen werden kann.Sie sollten diesen Code verwenden, wenn Ihr Modul beispielsweise den Benutzernamen und das Kennwort als Eingabe von einem Benutzer erhält, überprüft, ob sie korrekt sind, und dann etwas mit dem Benutzerobjekt unternimmt.
Wenn Sie ein Modul schreiben, das die Identität eines Benutzers annehmen muss, um einen Kommentar zu verfassen, oder wenn Sie etwas anderes tun müssen, das als Ergebnis von einem Benutzer ausgeführt werden muss, führt das Modul Projekt-Fehlerverfolgung genau dies aus, wenn Sie einen Fehlerbericht schließen, der sich im befunden hat fester Status für zwei Wochen (in diesem Fall wird der Kommentar "Automatisch geschlossen - Problem für 2 Wochen ohne Aktivität behoben" hinzugefügt, der vom Benutzer "Systemmeldung" geschrieben wurde. Sie benötigen dann keinen Benutzernamen und kein Kennwort. Sie laden einfach das Benutzerobjekt, für das Sie die Benutzer-ID kennen.
Soweit ich weiß, gibt es keine Sicherheitsprobleme mit dem von mir gemeldeten Code.
Sie können die Anzahl der fehlgeschlagenen Anmeldungen begrenzen. oder um die IP vorübergehend zu blockieren, die versucht, sich ohne Erfolg anzumelden, oder versucht, sich in kurzer Zeit anders anzumelden.
quelle
Dieser Code funktioniert wirklich
quelle
Aufgeräumte Antwort von oben. Die Überprüfung von Benutzer und Passwort ist eine zusätzliche Funktion. Außerdem muss der gefälschte form_state eine Variable sein, die als Referenz an die Funktion übergeben werden soll, oder es wird ein Fehler ausgegeben.
Daher haben wir:
quelle
Der Benutzer erhält die Sitzung und wird auch auf anderen Seiten angemeldet:
quelle
Manchmal müssen wir uns schnell über die URL anmelden oder das Administrator-Passwort vergessen. Implementieren Sie einfach die folgenden zwei Funktionen, um sich als Benutzer 1 in Drupal anzumelden.
quelle