Was ich erreichen muss, ist die Möglichkeit für den Administrator, die Sitzung eines bestimmten Benutzers zu entfernen, um eine erneute Anmeldung zu erzwingen. Dies kann nützlich sein, wenn sich beispielsweise Benutzerberechtigungen ändern. Wie binden Sie Sitzung und Benutzer zusammen, damit andere Benutzer auf diese Daten zugreifen können?So löschen Sie die Sitzung für einen bestimmten Benutzer in CakePHP3?
Ich verwende den Datenbanksitzungsspeicher, so dass das Entfernen eines Datensatzes aus der Datenbank zu einem erneuten Erzwingen der Anmeldung führen würde. Auch die Authentifizierung basiert auf Auth
Komponente.
Hier einige meiner verwandten config:
$this->loadComponent('Auth', [
'loginAction' => [
'controller' => 'Auth',
'action' => 'login'
],
'loginRedirect' => "/home",
'logoutRedirect' => [
'controller' => 'Auth',
'action' => 'login'
],
'authError' => "You have no permissions to access resource ${url}. Contact system administrator.",
'storage' => 'Session',
'authenticate' => [
'Form' => [
'userModel' => 'User',
'finder' => 'user',
'fields' => ['username' => 'name', 'password' => 'password']
]
],
'authorize' => ["Controller"]
]);
und Sitzungsspeicher:
'Session' => [
'defaults' => 'database',
]
Unten habe ich markiert haben, wo ich Datenbank-Update-Code platzieren würde. Leider wird die Sitzung nach der Ausführung des Logs "revalidiert", so dass sich die ID ändert. Alles in allem sind Änderungen in der Login-Aktion nach der Weiterleitung nicht sichtbar.
Anmeldung Aktion:
public function login()
{
$form = new LoginForm();
if ($this->request->is('post')) {
if ($form->validate($this->request->data)) {
$user = $this->Auth->identify();
if ($user) {
$this->Auth->setUser($user);
// here would be good place to update the database
return $this->redirect($this->Auth->redirectUrl());
} else {
$this->Flash->error("Invalid security credentials provided");
}
} else {
$this->Flash->error("Invalid login form");
}
}
$this->set('loginForm', $form);
}
Die Sitzung wird erneuert, wenn die Auth-Komponente in den Sitzungsspeicher schreibt. Der Zugriff auf die Sitzungs-ID nach dem Aufruf von '$ this-> Auth-> setUser()' sollte also funktionieren. Was genau hast du probiert? – ndm
Ich habe genau das versucht, was Sie erwähnt haben. Im Code oben habe ich den Datenbankinhalt an der Stelle geändert, an der der Kommentar steht (nach setUser), aber diese wird nach der Umleitung oder der neuen Anfrage immer noch überschrieben. – Antoniossss
Sie müssen ein wenig genauer sein, idealerweise den Code, den Sie benutzt haben, und erklären was genau "_gets overriden_" bedeutet, _where_ wird _what_ mit _what_ überschrieben? – ndm