Créer une API Rest avec Symfony 3

résultat web

a marqué ce sujet comme résolu.

Bonjour, J’ai un petit problème similaire à celui-ci mais la solution proposée ne corresponds pas à mon problème.

Je suis sur la partie sécurisation de l’api du tutoriel de création d’une API du site .

Actuellement le résultat de la réponse est vide que ce soit quand l’authentification échoue ou réussi. Plus exactement: 401 201

Voici mon contrôleur pour la route auth-token:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 /**
     * @Rest\View(statusCode=Response::HTTP_CREATED, serializerGroups={"auth-token"})
     * @Rest\Post("/auth-tokens")
     * @param Request $request
     * @return AuthToken|\FOS\RestBundle\View\View
     */
    public function postAuthTokensAction(Request $request)
    {
        $credentials = new Credentials();
        $form = $this->createForm(CredentialsType::class, $credentials);

        $form->submit($request->request->all());

        if (!$form->isValid()) {
            return \FOS\RestBundle\View\View::create(['message' => 'Invalid form'], Response::HTTP_BAD_REQUEST);
        }

        $em = $this->get('doctrine.orm.entity_manager');

        $user = $em->getRepository('AppBundle:User')
            ->findOneByEmail($credentials->getEmail());

        if (!$user) { // L'utilisateur n'existe pas
            return $this->invalidCredentials();
        }

        $encoder = $this->get('security.password_encoder');
        $isPasswordValid = $encoder->isPasswordValid($user, $credentials->getPassword());

        if (!$isPasswordValid) { // Le mot de passe n'est pas correct
            return $this->invalidCredentials();
        }

        $authToken = new AuthToken();
        $authToken->setValue(base64_encode(random_bytes(50)));
        $authToken->setCreatedAt(new \DateTime('now'));
        $authToken->setUser($user);

        $em->persist($authToken);
        $em->flush();

        return $authToken;
    }

Je me suis demandé si cela ne pouvait pas venir de la configuration du sérialiseur dont voici la configuration dans le bon chemin:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
AppBundle\Entity\User:
    attributes:
        id:
            groups: ['user', 'preference', 'auth-token']
        firstname:
            groups: ['user', 'preference', 'auth-token']
        lastname:
            groups: ['user', 'preference', 'auth-token']
        email:
            groups: ['user', 'preference', 'auth-token']
        preferences:
            groups: ['user']

AppBundle\Entity\AuthToken:
    attributes:
        id:
            groups: ['auth-token']
        value:
            groups: ['auth-token']
        createdAt:
            groups: ['auth-token']
        user:
            groups: ['auth-token']

`

Ma version de symfony est la v3.3.5 et j’ai bien vidé le cache.

Une idée ? Je ne comprends même pas pourquoi je n’ai pas le message définis dans le contrôleur en cas d’échec. L’idéal pour moi serait d’avoir ce message car en cas d’échec je pourrais l’afficher au client.

Mon front est en angular et j’utilise le template ng2-admin, je ne sais pas si cela peut aider.

Merci pour votre aide.

Thibault.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte