Как получить подтверждение по электронной почте в fosUserBundle с помощью метода rest - PullRequest
0 голосов
/ 20 июня 2020

Я использую fosUserBundle в Symfony 3. Я хочу зарегистрировать нового пользователя без использования страницы регистрации (http://localhost:8000/register), а не с помощью метода REST. Я использую Angular для внешнего приложения, поэтому там будет создана страница регистрации.

Мне удалось зарегистрировать нового пользователя с помощью этого метода:

/**
 * @Route("/subscribe", name="createUserby")
 */
public function subscribe(Request $request)
{
    $usermane = $request->query->get('username');
    $password = $request->query->get('password');
    $email = $request->query->get('email');

    $userManager = $this->get('fos_user.user_manager');
    $entityManager = $this->get('doctrine')->getManager();
    $data = $request->request->all();
    $user = $userManager->createUser();
    $user->setUsername($usermane);
    $user->setPlainPassword($password);
    $user->setEmail($email);
    $userManager->updateUser($user);
    $response = array('code'=>1,'message'=>'user '.$usermane.' created');
    return new JsonResponse($response);
}

Если я использую страницу регистрации (http://localhost:8000/register), я успешно получаю письмо с подтверждением, но когда я использую вышеуказанный метод, я не получаю.

Это мой security.yml код:

security:
encoders:
    FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
    fos_userbundle:
        id: fos_user.user_provider.username_email

firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    api_doc:
        pattern: ^/api/doc
        security: false

    login:
        pattern:  ^/api/login
        stateless: true
        anonymous: true
        form_login:
            check_path:               /api/login_check
            username_parameter: username
            password_parameter: password
            success_handler:          lexik_jwt_authentication.handler.authentication_success
            failure_handler:          lexik_jwt_authentication.handler.authentication_failure
            require_previous_session: false
    api:
        pattern:   ^/api
        stateless: true
        provider: fos_userbundle
        guard:
            authenticators:
                - lexik_jwt_authentication.jwt_token_authenticator
    main:
        pattern: ^/
        user_checker: security.user_checker
        form_login:
            provider: fos_userbundle
            csrf_token_generator: security.csrf.token_manager
        logout:       true
        anonymous:    true

        logout_on_user_change: true

access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, role: ROLE_ADMIN }

Конфигурация fos_user в config.yml коде:

fos_user:
db_driver: orm # other valid values are 'mongodb' and 'couchdb'
firewall_name: main
user_class: AppBundle\Entity\User
from_email:
    address: "%mailer_user%"
    sender_name: "%mailer_user%"
registration:
confirmation:
    enabled: true

Есть идеи, почему это не работает?

...