Symfony Guard和奏鸣曲管理员

新万博ManBetX官网在线
2017年9月29日

自从Symfony 2.8,我们有一个漂亮的和闪亮的后卫身份验证组件.Guard可以替换SonataUserBundle,在这篇文章的其余部分,我们将向你展示如何替换。因为有伟大的文档关于警卫设置,我们将跳过这部分,直接让它与索纳塔管理工作。我们假定您已经有了用户实体、验证器和用户提供者。

这篇文章是在我谈论Symfony Guard之后写的,一定要去看看在这里

首先,我们需要一个简单的登录表单:

<?php名称空间YourBundle \ \类型;使用Symfony \组件\ \ AbstractType形式;使用Symfony \组件\ \ FormBuilderInterface形式;组件使用Symfony \ \ \ \ \核心类型的扩展\ PasswordType形式;使用Symfony \ \ OptionsResolver \ OptionsResolver组件;class LoginType extends AbstractType {public function buildForm(FormBuilderInterface $builder, array $options) {$builder ->add('username') ->add('password', PasswordType::class);} public function configureOptions(OptionsResolver $resolver){父::configureOptions($resolver);$resolver->setDefaults(array('csrf_protection' => true));} }

和一个很好的模板去配合它(感谢SonataUserBundle,这是一个简单的):

{% SonataAdminBundle:: standard_layout.html延伸”。嫩枝' %}{%块sonata_nav %} {% endblock sonata_nav %}{%块标志%}{% endblock标志%}{%块sonata_left_side %} {% endblock sonata_left_side %}{%块body_attributes %}类=“sonata-bc登录页面”{% endblock %}{%块sonata_wrapper %} < div class = "登录框" > < div class = " login-logo " > < a href = "{{路径(sonata_admin_dashboard)}} " >< div > < img风格= "宽度:64 px; " src = "{{资产(路径/ /你/标志)}}“alt = "登录" > < / div > < span >登录< / span > < / > < / div > < div class = " login-box-body " >{%块sonata_user_login_form %}{%块sonata_user_login_error %}{%如果错误%}< div class = "警报alert-danger alert-error”>{{错误}}< / div > {% endif %} {% endblock %}{%的标签,闪烁在app.session.flashbag.all %}{%闪光灯的闪光%}< div class = "警报警报——{{标签}}> {{flash}} < / div > {% endfor %} {% endfor %} < p类=“login-box-msg”>{{“身份验证”|反式}}< / p > <表单动作= "{{路径(admin_login)}}”方法=“post”角色=“形式”> {{form_row (form._token)}} < div class = "形式的班级有反馈”> <输入Type ="text" class="form-control" id="username" name="{{form.username.vars. name";full_name}}" value="{{last_username}}" required="required" placeholder="Username"/>

<跨类=“glyphicon glyphicon-lock form-control-feedback " > < / span > < / div > < div class = "行" > < div class = " col-xs-4 " > <按钮类型=“提交”class =“btn btn-primary btn-block btn-flat”>登录按钮< / > < / div > < / div > < /形式> {% endblock %} < / div > < / div > {% endblock sonata_wrapper %}

我们还需要一个控制器来处理登录和注销,注销函数是空的,因为Symfony会处理这部分,但我们仍然需要它:

<?php名称空间YourBundle \控制器;使用Symfony \包\ FrameworkBundle \ \控制器;使用YourBundle \ \类型\ LoginType形式;使用Symfony \ HttpFoundation \ \组件请求;使用Sensio赞助\包\ FrameworkExtraBundle \ Configuration \路线;class SecurityController extends Controller {/** * @Route("/admin/login", name="admin_login") */ public function loginAction() {$helper = $this->get('security.authentication_utils');$form = $this->createForm(LoginType::class, array('用户名' => $helper->getLastUsername()));返回$ this - >渲染(YourBundle:安全:login.html。twig', array('last_username' => $helper->getLastUsername(), 'form' => $form->createView(), 'error' => $helper->getLastAuthenticationError(),)); } /** * @Route("/admin/logout", name="admin_logout") */ public function logoutAction() { } }

最后,剩下的唯一也是最重要的东西就是防火墙:

防火墙:#……Admin: pattern: / Admin (.*) form_login: provider: users login_path: admin_login #我们的登录路由use_forward: false check_path: admin_login failure_path: null logout: path: admin_logout #我们的注销路由target: admin_login anonymous: true guard: authenticators: - app.authenticator. log . logadmin_login #如果在Symfony 3.3上使用FQCN

我们做完了!转到您的登录路径,并尝试您伟大的新身份验证。

新万博ManBetX官网在线