Skip to content

Commit c86eaf3

Browse files
committed
Refresh session data via /me endpoint
1 parent 5a447da commit c86eaf3

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,7 @@ You can tune the middleware behavior using middleware specific configuration par
708708
- "dbAuth.usernameColumn": The users table column that holds usernames ("username")
709709
- "dbAuth.passwordColumn": The users table column that holds passwords ("password")
710710
- "dbAuth.returnedColumns": The columns returned on successful login, empty means 'all' ("")
711+
- "dbAuth.refreshSession": Number of minutes before a session is refreshed via api.php/me endpoint, (0)
711712
- "dbAuth.usernameFormField": The name of the form field that holds the username ("username")
712713
- "dbAuth.usernamePattern": Specify regex pattern for username. Defaults to alpha-numeric charactes ("/^[A-Za-z0-9]+$/")
713714
- "dbAuth.usernameMaxLength": Specify maximum length of username (30)

src/Tqdev/PhpCrudApi/Middleware/DbAuthMiddleware.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
156156
session_regenerate_id(true);
157157
}
158158
unset($user[$passwordColumnName]);
159+
$_SESSION['updatedAt'] = time();
159160
$_SESSION['user'] = $user;
160161
return $this->responder->success($user);
161162
} else {
@@ -173,6 +174,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
173174
session_regenerate_id(true);
174175
}
175176
unset($user[$passwordColumnName]);
177+
$_SESSION['updatedAt'] = time();
176178
$_SESSION['user'] = $user;
177179
return $this->responder->success($user);
178180
}
@@ -221,6 +223,25 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
221223
}
222224
if ($method == 'GET' && $path == 'me') {
223225
if (isset($_SESSION['user'])) {
226+
$updateAfter = $this->getProperty('refreshSession',0) * 60;//update session after x minutes
227+
if($updateAfter > 0 &&( time() >($_SESSION['user']['updatedAt'] + $updateAfter))){
228+
$tableName = $this->getProperty('loginTable','users');
229+
$table = $this->reflection->getTable($tableName);
230+
$pkName = $table->getPk()->getName();
231+
$passwordColumnName = $this->getProperty('passwordColumn','');
232+
$returnedColumns = $this->getProperty('returnedColumns','');
233+
if(!$returnedColumns){
234+
$columnNames = $table->getColumnNames();
235+
}else{
236+
$columnNames = array_map)('trim',explode(',',$returnedColumns));
237+
$columnNames[] = $passwordColumnName;
238+
$columnNames = array_values(array_unique($columnNames));
239+
}
240+
$user = $this->db->selectSingle($table,$columnNames,$_SESSION['user'][$pkName]);
241+
unset($user[$passwordColumnName]);
242+
$user['updatedAt'] = time();
243+
$_SESSION['user'] = $user;
244+
}
224245
return $this->responder->success($_SESSION['user']);
225246
}
226247
return $this->responder->error(ErrorCode::AUTHENTICATION_REQUIRED, '');

0 commit comments

Comments
 (0)