4
我想摆脱FOSUserBundle,因为我想实现一个角色实体链接在与我的用户manytomany关系。Symfony2:如何实现自定义用户登录和注册 - 摆脱FOSUSerBundle
所以我的问题是:会有一步一步教程来取代这个FOSUserBundle?如果没有,有人可以引导我至少通过我需要实现的因素,因为我觉得我总是忘记了一些东西。
到目前为止,我有:
- 类用户实现AdvancedUserInterface,\序列化
- 类UserProvider实现UserProviderInterface
- 具有公共职能registerAction(请求$要求)控制器 办理储蓄数据库中的用户。
在这里,我可以保存用户,我看到盐,密码,用户名和电子邮件都保存,但处理请求后,我什么也得不到,登录是不可能的。
我需要同时实现:
- 自定义身份验证提供
- 或用户API密钥
如果有,是哪一个?
然后呢?
我的注册码:为什么没有调用return语句?
/**
* @Route("/register_user", name="register_user")
* @Method({"GET","POST"})
* @param Request $request
* @param bool $extendLayout
* @return null|\Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
*/
public function registerAction(Request $request, $extendLayout=true)
{
$formManager = $this->get('form_manager');
$user = new User();
$user->setEnabled(true);
$form = $formManager->createForm(new UserRegistrationType(), $user, 'POST', 'register_user',null, false);
if ($request->getMethod() == 'POST')
{
if ($formManager->handleRequestAndValidate($form))
{
$userSecurityManager = $this->get('user_security_manager');
$userSecurityManager->updateUser($user, true);
//This return won't get called, is there an eventlistener on the register event ?
return $this->redirect($this->generateUrl('registration_confirmed'));
}
}
$layout = $extendLayout == true ? 'User/Registration/register.html.twig' : 'User/Registration/register_content.html.twig';
return $this->render($layout, array(
'form' => $form->createView(),
));
}
我的登录表单发送到我相信symfony中被处理,登录失败,我创建用户login_check路线。为什么?
我的登录表单:
<div class="fmu_panel fmu_login">
<h3>Vous êtes inscrit</h3>
<div class="panel-content">
<form action="{{ path("login_check") }}" id="signup-form_id" method="post">
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />
{% if error %}
<div class="form-group">
<div class="alert alert-danger" role="alert">
{#{{ error.messageKey|trans(error.messageData, 'security') }}#}
Mot de passe ou nom d'utilisateur incorrect.
</div>
</div>
{% endif %}
<div class="form-group w-icon">
<input type="text" id="username" name="_username" value="{{ last_username }}" required="required" class="form-control" placeholder="E-mail ou pseudo" />
<i class="fa fa-user"></i>
</div> <!--/Username -->
<div class="form-group w-icon">
<input type="password" id="password" name="_password" required="required" class="form-control" placeholder="Mot de passe" />
<i class="fa fa-lock"></i>
</div> <!--/Password -->
<div class="form-group">
<label for="_remember_me" class="checkbox-inline">
<input type="checkbox" name="_remember_me" id="remember_me" checked>
Se souvenir de moi
</label>
</div>
<div class="form-actions">
<input type="submit" value="S'identifier" class="btn btn-primary" name="_submit" id="fmu_signin">
<a href="#" class="forgot-password btn btn-danger pull-right" id="fmu_forgot_password_link">Mot de passe oublié ?</a>
</div>
{#
<div class="social">
<a href="{{ path('hwi') }}twitter" class="btn btn-default">Se connecter avec <span>Facebook</span></a>
</div>
#}
</form>
<div id="fmu_password_reset">
{{ render(controller('AppBundle:User/UserSecurity:requestNewPassword')) }}
</div>
</div>
</div>
<script>
// Show/Hide password reset form on click
$(function(){
$('#fmu_forgot_password_link').on('click', function (e) {
e.preventDefault();
$('#fmu_password_reset').fadeIn(400);
$('#signup-form_id').fadeOut(400);
});
$('#fmu_password_reset .close').click(function (e) {
e.preventDefault();
$('#fmu_password_reset').fadeOut(400);
$('#signup-form_id').fadeIn(400);
});
});
</script>
您的'exit'调用是在函数返回之后,因此它永远不会被调用。 –
是的,当然,对不起。我忘了提及'registration_confirmed'控制器开始处的相同出口未打印出来。所以实际上这是没有被调用的回报。是否有注册事件的事件监听者? –
它看起来并不像是在保存新用户。它实际上是否填充到数据库中?你最好的选择是检查日志或者是否进入if语句。 –