Зарегистрировать пользователя в приложении Angular / Symfony - PullRequest
0 голосов
/ 23 октября 2018

Мне интересно, каков рекомендуемый способ регистрации нового пользователя в приложении, использующем angular в качестве внешнего интерфейса и symfony (с api-платформой) в качестве внутреннего.

В настоящее время я просто публикую новыйпользовательский объект для API / пользователей.Однако я чувствую, что это не будет наилучшей практикой, поскольку мне нужно предоставить этот маршрут для анонимно аутентифицированных пользователей.

Я бы предпочел использовать маршрут регистрации, предоставляемый анонимно аутентифицированным пользователям, и выставить api /Пользователи маршрутизируют только для полностью аутентифицированных пользователей с ролью, такой как ROLE_ADMIN.

Поэтому у меня следующие вопросы:

  • Не думаю ли я об этом?
  • Если нет, то какреализовать это на стороне Symfony?

Пока у меня есть SignUpController, подобный этому:

/**
 * @Route("/signup", name="signup")
 */
public function signUpAction(Request $request)
{
    $user = new User();

    $form = $this->createForm(UserType::class, $user);
    $form->handleRequest($request);

    if ($request->isMethod('POST')) {

        try {
            $em = $this->getDoctrine()->getEntityManager();
            $em->persist($user);
            $em->flush();

            return new JsonResponse($user);
        } catch (\Exception $e) {
            return new JsonResponse($e->getMessage(), 500);
        }
    }
}

Но таким образом методы, такие как $form->isSubmitted() и $form->isValid() недоступныи, что более важно, $form->handleRequest() ничего не делает, а это значит, что мне придется увлажнять мой $user объект вручную, что далеко от идеала.

1 Ответ

0 голосов
/ 23 октября 2018

Ваш сценарий может быть реализован и с помощью Angular!Поэтому, пожалуйста, учтите это, только если вы хотите сделать это, используя Angular!

Вы можете эффективно использовать Angular 'Route Guards' для этой цели.Следующий код демонстрирует использование маршрутных охранников -

canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
    const currentUser = this.userService.getCurrentUser();
    this.currentUserRole = currentUser ? JSON.parse(currentUser)['role'] : undefined;
    this.currentUserRole = this.currentUserRole ? this.currentUserRole.toLowerCase() : undefined;
    const isLoggedIn = this.userService.isLoggedIn();
    if (isLoggedIn) {
      if (this.currentUserRole == 'admin') {
        return true;
      } else {
        return false;
      }
    } else {
      return false;
    }
}

И, в ваших маршрутах -

{ path: 'api/users', component: SecureComponent, canActivate: [AuthGuard]},    // AuthGuard is the name of Guard Class
{ path: 'signup', component: PublicComponent }

См. этот для получения дополнительной информации.подробности.

...