dev-master
9999999-dev https://github.com/Elao/VoucherAuthenticationBundle.gitProvide authentication through vouchers (for email link).
MIT
The Requires
authentication security bundle symfony elao
Provide authentication through vouchers (for email link).
Provide authentication through vouchers (for email link)., (*1)
composer require elao/voucher-authentication-bundle
app/AppKernel.php
:class AppKernel extends Kernel { public function registerBundles() { return [ // ... new Elao\Bundle\VoucherAuthenticationBundle\ElaoVoucherAuthenticationBundle(), ]; } }
By importing the provided route configuration in your app/config/routing.yml
:, (*2)
# routing.yml elao_voucher_authentication: resource: "@ElaoVoucherAuthenticationBundle/Resources/config/routing.xml" prefix: /
Note: You can also declare your own route as long as you specify the corresponding check_path
and token_parameter
parameters in your voucher security configuration (see "Custom voucher route")., (*3)
The Voucher Authentication bundle porvider a voucher
security provider., (*4)
You can enable voucher authentication very simply in your security.yml
:, (*5)
security: firewalls: main: voucher: ~
Create a new VoucherInterface
(you can use the provided DisposableAuthenticationVoucher
implementation or make your own).
Then get its token with getToken()
and, for example, send it to the user by email:, (*6)
use Elao\Bundle\VoucherAuthenticationBundle\Voucher\DisposableAuthenticationVoucher; class SecurityController extends Controller { /** * @Route("forgot-password", name="forgot_password") */ public function forgotPasswordAction() { $voucher = new DisposableAuthenticationVoucher('jane_doe', '+1 hour'); $activationUrl = $this->generateUrl('voucher', ['token' => $voucher->getToken()]); // Don't forget to persist the voucher, or the user won't be able to log in. $this->get('elao_voucher_authentication.voucher_provider.default')->persist($voucher); $this->mailer->sendResetPasswordEmail($activationUrl); } }
Generate a voucher for the given username (optionally set a time-to-live):, (*7)
bin/console voucher:generate:authenticatio [username] (--ttl="+1 hour")
Will result in:, (*8)
Authentication voucher for user admin with expiration on 2016-11-15 13:42:24: 6fb11ec1eecd07865d940dd0f990d66b, (*9)
You can protect a route, or any part of you app, by requiring a specific voucher authentication.
For exameple, you can allow the route to reset password only to users authenticated via a Voucher with intent reset_password
., (*10)
Use the following security expression: is_granted('voucher', $intent)
where $intent is the intent you provided to your Voucher
object., (*11)
class SecurityController extends Controller { /** * @Route("reset_password", name="reset_password") * @Security("is_granted('voucher', 'password')") */ public function resetPasswordAction() {} } ## Full configuration ```yml security: firewalls: main: voucher: remember_me: true check_path: voucher use_forward: false require_previous_session: true token_parameter: token always_use_default_target_path: false default_target_path: / login_path: /login target_path_parameter: _target_path use_referer: false failure_path: null failure_forward: false failure_path_parameter: _failure_path voucher_provider: elao_voucher_authentication.voucher_provider.default
# routing.yml my_voucher_route: path: /activate/{my_token}
security: firewalls: main: voucher: check_path: my_voucher_route token_parameter: my_token
Provide authentication through vouchers (for email link).
MIT
authentication security bundle symfony elao