fos php symfony login registration fosuserbundle

php - Symfony2: cómo implementar el registro y registro de usuario personalizado: deshazte de FOSUSerBundle



install fos user symfony (1)

Estoy tratando de deshacerme de FOSUserBundle porque quería implementar una entidad de rol vinculada en una relación manytomany con mi usuario.

Entonces mi pregunta es: ¿habría un tutorial paso a paso para reemplazar este FOSUserBundle? Si no, ¿alguien puede guiarme al menos a través de los elementos que necesito implementar porque siento que siempre olvidé algo?

Hasta ahora tengo:

  1. Un usuario de clase implementa AdvancedUserInterface, / Serializable
  2. Una clase UserProvider implementa UserProviderInterface
  3. Un controlador con una función pública registerAction (Request $ request) para gestionar el guardado del usuario en la base de datos.

Aquí puedo guardar al usuario y veo que se guardan la sal, la contraseña, el nombre de usuario y el correo electrónico, pero después de procesar la solicitud no obtengo nada y no puedo iniciar sesión.

¿Debo implementar también?

  1. Un proveedor de autenticación personalizado
  2. o claves de API de usuario

Si sí, cual ?

Y después ?

Mi código de registro: ¿por qué no se llama a la declaración de devolución?

/** * @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(), )); }

Mi formulario de inicio de sesión se envía a la ruta login_check que creo que Symfony está manejando y el inicio de sesión falla con el usuario que estoy creando. Por qué ?

Mi formulario de inicio de sesión:

<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>


Puede seguir el tutorial: Cómo cargar usuarios de seguridad de la base de datos .

Básicamente necesitas:

  • Clase de usuario personalizado ( que tiene )
  • Configure el componente de seguridad de Symfony ( probablemente falte )
  • ( opcional ) Proveedor de usuario personalizado

Aquí está el ejemplo security.yml del tutorial mencionado anteriormente:

# app/config/security.yml security: encoders: AppBundle/Entity/User: algorithm: bcrypt # ... providers: our_db_provider: entity: class: AppBundle:User property: username # if you''re using multiple entity managers # manager_name: customer firewalls: default: pattern: ^/ http_basic: ~ provider: our_db_provider # ...

Su formulario de inicio de sesión parece ser correcto, por lo que debería funcionar con la configuración de seguridad correcta.