Browse Source

finished Single Login mode

- updated Libraries/Aauth (updated login())
- updated LoginTokenModel & LoginTokenModelTest
- updated UserSessionModel
v3-dev
REJack 6 years ago
parent
commit
0cbc63e1e7
No known key found for this signature in database
GPG Key ID: 4A44B48700429F46
  1. 36
      app/Libraries/Aauth.php
  2. 16
      app/Models/Aauth/LoginTokenModel.php
  3. 5
      app/Models/Aauth/UserSessionModel.php
  4. 7
      tests/Aauth/Database/LoginTokenModelTest.php

36
app/Libraries/Aauth.php

@ -313,6 +313,41 @@ class Aauth
if (password_verify($password, $user['password'])) if (password_verify($password, $user['password']))
{ {
$loginTokenModel = new LoginTokenModel();
if ($this->config->loginSingleMode)
{
$loginTokenModel->deleteAll($user['id']);
$userSessionModel = new UserSessionModel();
foreach ($userSessionModel->findAll() as $userSessionRow)
{
$result = $matches = [];
$sessionData = ';' . $userSessionRow['data'];
$keyreg = '/;([^|{}"]+)\|/';
preg_match_all($keyreg, $sessionData, $matches);
if (isset($matches[1]))
{
$keys = $matches[1];
$values = preg_split($keyreg, $sessionData);
if (count($values) > 1)
{
array_shift($values);
}
$result = array_combine($keys, $values);
$userSession = unserialize($result['user']);
if ($userSession['id'] === $user['id'])
{
$userSessionModel->delete($userSessionRow['id']);
}
}
}
}
$data['id'] = $user['id']; $data['id'] = $user['id'];
$data['username'] = $user['username']; $data['username'] = $user['username'];
$data['email'] = $user['email']; $data['email'] = $user['email'];
@ -322,7 +357,6 @@ class Aauth
if ($remember) if ($remember)
{ {
helper('text'); helper('text');
$loginTokenModel = new LoginTokenModel();
$expire = $this->config->loginRemember; $expire = $this->config->loginRemember;
$userId = base64_encode($user['id']); $userId = base64_encode($user['id']);
$randomString = random_string('alnum', 32); $randomString = random_string('alnum', 32);

16
app/Models/Aauth/LoginTokenModel.php

@ -161,6 +161,22 @@ class LoginTokenModel
return true; return true;
} }
/**
* Deletes all Login Tokens by userId.
*
* @param integer $userId User id
*
* @return boolean
*/
public function deleteAll(int $userId)
{
$builder = $this->builder();
$builder->where('user_id', $userId);
$builder->delete();
return true;
}
/** /**
* Provides a shared instance of the Query Builder. * Provides a shared instance of the Query Builder.
* *

5
app/Models/Aauth/UserSessionModel.php

@ -95,7 +95,6 @@ class UserSessionModel
$this->config = new AauthConfig(); $this->config = new AauthConfig();
$this->DBGroup = $this->config->dbProfile; $this->DBGroup = $this->config->dbProfile;
$this->table = $this->config->dbTableUserSessions; $this->table = $this->config->dbTableUserSessions;
$this->tempReturnType = $this->returnType;
if ($db instanceof ConnectionInterface) if ($db instanceof ConnectionInterface)
{ {
@ -122,9 +121,7 @@ class UserSessionModel
$builder->where("data NOT LIKE CONCAT('%', timestamp, '%')"); $builder->where("data NOT LIKE CONCAT('%', timestamp, '%')");
$builder->like('data', 'user|'); $builder->like('data', 'user|');
$this->tempReturnType = $this->returnType; return $builder->get()->getResult($this->returnType);
return $builder->get()->getResult($this->tempReturnType);
} }
/** /**

7
tests/Aauth/Database/LoginTokenModelTest.php

@ -45,6 +45,13 @@ class LoginTokenModelTest extends CIDatabaseTestCase
$this->assertCount(0, $this->model->findAllByUserId(99)); $this->assertCount(0, $this->model->findAllByUserId(99));
} }
public function testDeleteAll()
{
$this->model->insert(['user_id' => 99, 'random_hash' => 'random_hash9999']);
$this->model->deleteAll(99);
$this->assertCount(0, $this->model->findAllByUserId(99));
}
public function testConfigDBGroup() public function testConfigDBGroup()
{ {
$this->model = new LoginTokenModel(); $this->model = new LoginTokenModel();

Loading…
Cancel
Save