Added option to stay logged in permanently

This commit is contained in:
Bernd Bestel 2018-09-24 13:16:57 +02:00
parent 66095738e3
commit 8540fc44f3
No known key found for this signature in database
GPG Key ID: 71BD34C0D4891300
4 changed files with 20 additions and 4 deletions

View File

@ -25,11 +25,12 @@ class LoginController extends BaseController
{ {
$user = $this->Database->users()->where('username', $postParams['username'])->fetch(); $user = $this->Database->users()->where('username', $postParams['username'])->fetch();
$inputPassword = $postParams['password']; $inputPassword = $postParams['password'];
$stayLoggedInPermanently = $postParams['stay_logged_in'] == 'on';
if ($user !== null && password_verify($inputPassword, $user->password)) if ($user !== null && password_verify($inputPassword, $user->password))
{ {
$sessionKey = $this->SessionService->CreateSession($user->id); $sessionKey = $this->SessionService->CreateSession($user->id, $stayLoggedInPermanently);
setcookie($this->SessionCookieName, $sessionKey, time() + 31536000); // Cookie expires in 1 year, but session validity is up to SessionService setcookie($this->SessionCookieName, $sessionKey, time() + 31220640000); // Cookie expires in 999 years, but session validity is up to SessionService
if (password_needs_rehash($user->password, PASSWORD_DEFAULT)) if (password_needs_rehash($user->password, PASSWORD_DEFAULT))
{ {

View File

@ -241,6 +241,8 @@ return array(
'Edit product group' => 'Produktgruppe bearbeiten', 'Edit product group' => 'Produktgruppe bearbeiten',
'Product group' => 'Produktgruppe', 'Product group' => 'Produktgruppe',
'Are you sure to delete product group "#1"?' => 'Produktgruppe "#1" wirklich löschen?', 'Are you sure to delete product group "#1"?' => 'Produktgruppe "#1" wirklich löschen?',
'Stay logged in permanently' => 'Dauerhaft angemeldet bleiben',
'When not set, you will get logged out at latest after 30 days' => 'Wenn nicht gesetzt, wirst du spätestens nach 30 Tagen automatisch abgemeldet',
//Constants //Constants
'manually' => 'Manuell', 'manually' => 'Manuell',

View File

@ -33,14 +33,20 @@ class SessionService extends BaseService
/** /**
* @return string * @return string
*/ */
public function CreateSession($userId) public function CreateSession($userId, $stayLoggedInPermanently = false)
{ {
$newSessionKey = $this->GenerateSessionKey(); $newSessionKey = $this->GenerateSessionKey();
$expires = date('Y-m-d H:i:s', time() + 2592000); // Default is that sessions expire in 30 days
if ($stayLoggedInPermanently === true)
{
$expires = date('Y-m-d H:i:s', time() + 31220640000); // 999 years aka forever
}
$sessionRow = $this->Database->sessions()->createRow(array( $sessionRow = $this->Database->sessions()->createRow(array(
'user_id' => $userId, 'user_id' => $userId,
'session_key' => $newSessionKey, 'session_key' => $newSessionKey,
'expires' => date('Y-m-d H:i:s', time() + 2592000) // Default is that sessions expire in 30 days 'expires' => $expires
)); ));
$sessionRow->save(); $sessionRow->save();

View File

@ -22,6 +22,13 @@
<div id="login-error" class="form-text text-danger d-none"></div> <div id="login-error" class="form-text text-danger d-none"></div>
</div> </div>
<div class="checkbox">
<label for="stay_logged_in">
<input type="checkbox" id="stay_logged_in" name="stay_logged_in"> {{ $L('Stay logged in permanently') }}
<p id="qu-conversion-info" class="form-text text-muted small my-0">{{ $L('When not set, you will get logged out at latest after 30 days') }}</p>
</label>
</div>
<button id="login-button" type="submit" class="btn btn-success">{{ $L('OK') }}</button> <button id="login-button" type="submit" class="btn btn-success">{{ $L('OK') }}</button>
</form> </form>