diff --git a/README.md b/README.md index 739340d..df68d1a 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,8 @@ Installation $ # EDIT propel.yaml (dsn) $ make propel +Edit `app/bootstrap.php.d/70-security.php` and modify the valye of `$app['token']` with a strong secret phrase. + Screencast: https://asciinema.org/a/19814 ### Git diff --git a/app/bootstrap.php.d/70-security.php b/app/bootstrap.php.d/70-security.php index c751293..5853802 100644 --- a/app/bootstrap.php.d/70-security.php +++ b/app/bootstrap.php.d/70-security.php @@ -2,6 +2,7 @@ use Gist\Service\UserProvider; use Silex\Provider\SecurityServiceProvider; +use Silex\Provider\RememberMeServiceProvider; use Gist\Service\SaltGenerator; use Gist\Security\AuthenticationProvider; use Gist\Security\AuthenticationListener; @@ -12,6 +13,7 @@ use Symfony\Component\Security\Http\HttpUtils; $app['enable_registration'] = true; $app['enable_login'] = true; +$app['token'] = 'ThisTokenIsNotSoSecretChangeIt'; $app['salt_generator'] = $app->share(function($app) { return new SaltGenerator(); @@ -24,8 +26,6 @@ $app['user.provider'] = $app->share(function ($app) { ); }); -$app->register(new SessionServiceProvider()); - $app['security.authentication_listener.factory.form'] = $app->protect(function ($name, $options) use ($app) { $app['security.authentication_provider.'.$name.'.form'] = $app->share(function ($app) { return new AuthenticationProvider($app['user.provider']); @@ -65,6 +65,11 @@ $app->register( 'users' => $app->share(function () use ($app) { return $app['user.provider']; }), + 'remember_me' => [ + 'key' => $app['token'], + 'path' => '/', + 'always_remember_me' => false, + ], ], ], 'security.access_rules' => [ @@ -73,6 +78,9 @@ $app->register( ] ); +$app->register(new SessionServiceProvider()); +$app->register(new RememberMeServiceProvider()); + $app['security.authentication.logout_handler._proto'] = $app->protect(function ($name, $options) use ($app) { return $app->share(function () use ($name, $options, $app) { return new LogoutSuccessHandler( diff --git a/app/locales/en.yml b/app/locales/en.yml index 2ca6365..c02fc04 100644 --- a/app/locales/en.yml +++ b/app/locales/en.yml @@ -49,6 +49,8 @@ login: placeholder: 'Username' password: placeholder: 'Password' + remember_me: + label: 'Remember me' register: title: 'New account' already_exists: 'This username is already registred!' diff --git a/app/locales/fr.yml b/app/locales/fr.yml index 0d0d4ff..d35bf7e 100644 --- a/app/locales/fr.yml +++ b/app/locales/fr.yml @@ -46,9 +46,11 @@ login: invalid: 'Nom d''utilisateur ou mot de passe incorrect.' form: username: - placeholder: 'Username' + placeholder: 'Nom d''utilisateur' password: - placeholder: 'Password' + placeholder: 'Mot de passe' + remember_me: + label: 'Se souvenir de moi' register: title: 'Nouveau compte' already_exists: 'Ce nom d''utilisateur est déjà enregistré' diff --git a/src/Gist/Form/UserLoginForm.php b/src/Gist/Form/UserLoginForm.php index 25ec5ac..30ceec0 100644 --- a/src/Gist/Form/UserLoginForm.php +++ b/src/Gist/Form/UserLoginForm.php @@ -19,7 +19,7 @@ class UserLoginForm extends AbstractForm 'required' => true, 'attr' => array( 'class' => 'form-control', - 'placeholder' => $this->translator->trans('login.register.form.username.placeholder'), + 'placeholder' => $this->translator->trans('login.login.form.username.placeholder'), ), 'constraints' => array( new NotBlank(array( @@ -36,9 +36,8 @@ class UserLoginForm extends AbstractForm 'required' => true, 'attr' => array( 'class' => 'form-control', - 'placeholder' => $this->translator->trans('login.register.form.password.placeholder'), + 'placeholder' => $this->translator->trans('login.login.form.password.placeholder'), ), - 'trim' => false, 'constraints' => array( new NotBlank(array( 'message' => $this->translator->trans('form.error.not_blank'), @@ -46,6 +45,20 @@ class UserLoginForm extends AbstractForm ), ) ); + + $this->builder->add( + '_remember_me', + 'checkbox', + array( + 'label' => $this->translator->trans('login.login.form.remember_me.label'), + 'required' => false, + 'mapped' => false, + 'attr' => array( + ), + 'constraints' => array( + ), + ) + ); return $this->builder; } diff --git a/src/Gist/Resources/views/Login/login.html.twig b/src/Gist/Resources/views/Login/login.html.twig index 260230f..f551214 100644 --- a/src/Gist/Resources/views/Login/login.html.twig +++ b/src/Gist/Resources/views/Login/login.html.twig @@ -1,44 +1,50 @@ {% extends 'base.html.twig' %} {% block title %} - {{ 'login.login.title'|trans }} + {{ 'login.login.title'|trans }} {% endblock %} {% block body %}
- {% if error %} -
-
- {{ error }} -
-
- {% endif %} + {% if error %} +
+
+ {{ error }} +
+
+ {% endif %} -
-
-
-
- {{ 'login.login.title'|trans }} -
-
-

- {{ form_errors(form._username) }} - {{ form_widget(form._username) }} -

- -

- {{ form_errors(form._password) }} - {{ form_widget(form._password) }} -

- -

- -

+ +
+
+
+ {{ 'login.login.title'|trans }} +
+
+

+ {{ form_errors(form._username) }} + {{ form_widget(form._username) }} +

+ +

+ {{ form_errors(form._password) }} + {{ form_widget(form._password) }} +

+ +

+ {{ form_errors(form._remember_me) }} + {{ form_widget(form._remember_me) }} + {{ form_label(form._remember_me) }} +

+ +

+ +

- -
-
-
- + +
+
+
+
{% endblock %}