'Remember me' on login. Issue #81.
This commit is contained in:
parent
4ce3c94798
commit
07359d82f6
8 changed files with 158 additions and 147 deletions
|
|
@ -42,6 +42,18 @@ class SessionController extends Controller
|
|||
*/
|
||||
public function login()
|
||||
{
|
||||
if (!empty($_COOKIE['remember_key'])) {
|
||||
$user = $this->userStore->getByRememberKey($_COOKIE['remember_key']);
|
||||
if ($user) {
|
||||
$_SESSION['php-censor-user-id'] = $user->getId();
|
||||
|
||||
$response = new b8\Http\Response\RedirectResponse();
|
||||
$response->setHeader('Location', $this->getLoginRedirect());
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
|
||||
$isLoginFailure = false;
|
||||
|
||||
if ($this->request->getMethod() == 'POST') {
|
||||
|
|
@ -53,10 +65,10 @@ class SessionController extends Controller
|
|||
|
||||
$email = $this->getParam('email');
|
||||
$password = $this->getParam('password', '');
|
||||
$rememberMe = (bool)$this->getParam('remember_me', 0);
|
||||
$isLoginFailure = true;
|
||||
|
||||
$user = $this->userStore->getByEmailOrName($email);
|
||||
|
||||
$user = $this->userStore->getByEmailOrName($email);
|
||||
$providers = $this->authentication->getLoginPasswordProviders();
|
||||
|
||||
if (null !== $user) {
|
||||
|
|
@ -67,7 +79,7 @@ class SessionController extends Controller
|
|||
// Ask each providers to provision the user
|
||||
foreach ($providers as $provider) {
|
||||
$user = $provider->provisionUser($email);
|
||||
if ($user !== null && $provider->verifyPassword($user, $password)) {
|
||||
if ($user && $provider->verifyPassword($user, $password)) {
|
||||
$this->userStore->save($user);
|
||||
$isLoginFailure = false;
|
||||
break;
|
||||
|
|
@ -77,8 +89,27 @@ class SessionController extends Controller
|
|||
|
||||
if (!$isLoginFailure) {
|
||||
$_SESSION['php-censor-user-id'] = $user->getId();
|
||||
|
||||
if ($rememberMe) {
|
||||
$rememberKey = md5(microtime(true));
|
||||
|
||||
$user->setRememberKey($rememberKey);
|
||||
$this->userStore->save($user);
|
||||
|
||||
setcookie(
|
||||
'remember_key',
|
||||
$rememberKey,
|
||||
(time() + 60 * 60 * 24 * 30),
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
$response = new b8\Http\Response\RedirectResponse();
|
||||
$response->setHeader('Location', $this->getLoginRedirect());
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
|
|
@ -102,6 +133,12 @@ class SessionController extends Controller
|
|||
$pwd->setClass('form-control');
|
||||
$form->addField($pwd);
|
||||
|
||||
$remember = b8\Form\Element\Checkbox::create('remember_me', Lang::get('remember_me'), false);
|
||||
$remember->setContainerClass('form-group');
|
||||
$remember->setCheckedValue(1);
|
||||
$remember->setValue(0);
|
||||
$form->addField($remember);
|
||||
|
||||
$pwd = new b8\Form\Element\Submit();
|
||||
$pwd->setValue(Lang::get('log_in'));
|
||||
$pwd->setClass('btn-success');
|
||||
|
|
@ -129,6 +166,16 @@ class SessionController extends Controller
|
|||
|
||||
session_destroy();
|
||||
|
||||
setcookie(
|
||||
'remember_key',
|
||||
null,
|
||||
(time() - 1),
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
true
|
||||
);
|
||||
|
||||
$response = new b8\Http\Response\RedirectResponse();
|
||||
$response->setHeader('Location', APP_URL);
|
||||
return $response;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue