mirror of
https://gitnet.fr/deblan/gist.git
synced 2021-08-14 08:30:49 +02:00
#5 Remember me feature
This commit is contained in:
parent
e65d19e627
commit
f36c0b8eeb
@ -25,6 +25,8 @@ Installation
|
|||||||
$ # EDIT propel.yaml (dsn)
|
$ # EDIT propel.yaml (dsn)
|
||||||
$ make propel
|
$ 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
|
Screencast: https://asciinema.org/a/19814
|
||||||
|
|
||||||
### Git
|
### Git
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
use Gist\Service\UserProvider;
|
use Gist\Service\UserProvider;
|
||||||
use Silex\Provider\SecurityServiceProvider;
|
use Silex\Provider\SecurityServiceProvider;
|
||||||
|
use Silex\Provider\RememberMeServiceProvider;
|
||||||
use Gist\Service\SaltGenerator;
|
use Gist\Service\SaltGenerator;
|
||||||
use Gist\Security\AuthenticationProvider;
|
use Gist\Security\AuthenticationProvider;
|
||||||
use Gist\Security\AuthenticationListener;
|
use Gist\Security\AuthenticationListener;
|
||||||
@ -12,6 +13,7 @@ use Symfony\Component\Security\Http\HttpUtils;
|
|||||||
|
|
||||||
$app['enable_registration'] = true;
|
$app['enable_registration'] = true;
|
||||||
$app['enable_login'] = true;
|
$app['enable_login'] = true;
|
||||||
|
$app['token'] = 'ThisTokenIsNotSoSecretChangeIt';
|
||||||
|
|
||||||
$app['salt_generator'] = $app->share(function($app) {
|
$app['salt_generator'] = $app->share(function($app) {
|
||||||
return new SaltGenerator();
|
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_listener.factory.form'] = $app->protect(function ($name, $options) use ($app) {
|
||||||
$app['security.authentication_provider.'.$name.'.form'] = $app->share(function ($app) {
|
$app['security.authentication_provider.'.$name.'.form'] = $app->share(function ($app) {
|
||||||
return new AuthenticationProvider($app['user.provider']);
|
return new AuthenticationProvider($app['user.provider']);
|
||||||
@ -65,6 +65,11 @@ $app->register(
|
|||||||
'users' => $app->share(function () use ($app) {
|
'users' => $app->share(function () use ($app) {
|
||||||
return $app['user.provider'];
|
return $app['user.provider'];
|
||||||
}),
|
}),
|
||||||
|
'remember_me' => [
|
||||||
|
'key' => $app['token'],
|
||||||
|
'path' => '/',
|
||||||
|
'always_remember_me' => false,
|
||||||
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'security.access_rules' => [
|
'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) {
|
$app['security.authentication.logout_handler._proto'] = $app->protect(function ($name, $options) use ($app) {
|
||||||
return $app->share(function () use ($name, $options, $app) {
|
return $app->share(function () use ($name, $options, $app) {
|
||||||
return new LogoutSuccessHandler(
|
return new LogoutSuccessHandler(
|
||||||
|
@ -49,6 +49,8 @@ login:
|
|||||||
placeholder: 'Username'
|
placeholder: 'Username'
|
||||||
password:
|
password:
|
||||||
placeholder: 'Password'
|
placeholder: 'Password'
|
||||||
|
remember_me:
|
||||||
|
label: 'Remember me'
|
||||||
register:
|
register:
|
||||||
title: 'New account'
|
title: 'New account'
|
||||||
already_exists: 'This username is already registred!'
|
already_exists: 'This username is already registred!'
|
||||||
|
@ -46,9 +46,11 @@ login:
|
|||||||
invalid: 'Nom d''utilisateur ou mot de passe incorrect.'
|
invalid: 'Nom d''utilisateur ou mot de passe incorrect.'
|
||||||
form:
|
form:
|
||||||
username:
|
username:
|
||||||
placeholder: 'Username'
|
placeholder: 'Nom d''utilisateur'
|
||||||
password:
|
password:
|
||||||
placeholder: 'Password'
|
placeholder: 'Mot de passe'
|
||||||
|
remember_me:
|
||||||
|
label: 'Se souvenir de moi'
|
||||||
register:
|
register:
|
||||||
title: 'Nouveau compte'
|
title: 'Nouveau compte'
|
||||||
already_exists: 'Ce nom d''utilisateur est déjà enregistré'
|
already_exists: 'Ce nom d''utilisateur est déjà enregistré'
|
||||||
|
@ -19,7 +19,7 @@ class UserLoginForm extends AbstractForm
|
|||||||
'required' => true,
|
'required' => true,
|
||||||
'attr' => array(
|
'attr' => array(
|
||||||
'class' => 'form-control',
|
'class' => 'form-control',
|
||||||
'placeholder' => $this->translator->trans('login.register.form.username.placeholder'),
|
'placeholder' => $this->translator->trans('login.login.form.username.placeholder'),
|
||||||
),
|
),
|
||||||
'constraints' => array(
|
'constraints' => array(
|
||||||
new NotBlank(array(
|
new NotBlank(array(
|
||||||
@ -36,9 +36,8 @@ class UserLoginForm extends AbstractForm
|
|||||||
'required' => true,
|
'required' => true,
|
||||||
'attr' => array(
|
'attr' => array(
|
||||||
'class' => 'form-control',
|
'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(
|
'constraints' => array(
|
||||||
new NotBlank(array(
|
new NotBlank(array(
|
||||||
'message' => $this->translator->trans('form.error.not_blank'),
|
'message' => $this->translator->trans('form.error.not_blank'),
|
||||||
@ -47,6 +46,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;
|
return $this->builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,44 +1,50 @@
|
|||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block title %}
|
{% block title %}
|
||||||
{{ 'login.login.title'|trans }}
|
{{ 'login.login.title'|trans }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{% if error %}
|
{% if error %}
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="alert alert-warning">
|
<div class="alert alert-warning">
|
||||||
{{ error }}
|
{{ error }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<form action="{{ path('login_check') }}" method="post" id="main-form">
|
<form action="{{ path('login_check') }}" method="post" id="main-form">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
{{ 'login.login.title'|trans }}
|
{{ 'login.login.title'|trans }}
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<p>
|
<p>
|
||||||
{{ form_errors(form._username) }}
|
{{ form_errors(form._username) }}
|
||||||
{{ form_widget(form._username) }}
|
{{ form_widget(form._username) }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
{{ form_errors(form._password) }}
|
{{ form_errors(form._password) }}
|
||||||
{{ form_widget(form._password) }}
|
{{ form_widget(form._password) }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" class="btn btn-primary" value="{{ 'form.submit'|trans }}">
|
{{ form_errors(form._remember_me) }}
|
||||||
</p>
|
{{ form_widget(form._remember_me) }}
|
||||||
|
{{ form_label(form._remember_me) }}
|
||||||
|
</p>
|
||||||
|
|
||||||
<input type="hidden" name="_target_path" value="{{ path('my') }}" />
|
<p>
|
||||||
</div>
|
<input type="submit" class="btn btn-primary" value="{{ 'form.submit'|trans }}">
|
||||||
</div>
|
</p>
|
||||||
</div>
|
|
||||||
</form>
|
<input type="hidden" name="_target_path" value="{{ path('my') }}" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
Loading…
Reference in New Issue
Block a user