Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2018-11-30T16:02:57+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Créer une API Rest avec Symfony 3, message #1939632018-11-30T16:02:57+01:00Etienne06/@Etienne06https://zestedesavoir.com/forums/sujet/9002/creer-une-api-rest-avec-symfony-3/?page=1#p193963<p>Bonjour thibault.falque,</p>
<p>Avez-vous trouvez une solution pour que cette condition (if(!$isPasswordValid)) passe à true ?</p>
<p>Merci</p>
<p>Etienne</p>Rest API error UserPasswordEncoder::encodePassword() , message #1763382018-03-25T22:17:30+02:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/10465/rest-api-error-userpasswordencoderencodepassword/?page=1#p176338<p><img alt="^^" src="/static/smileys/hihi.png"></p>
<p>Je te rassure, ce genre d’erreur, j’en fais une dizaine par jour.</p>
<p>Si jamais, pour dire que ton sujet est résolu, tu as une action dans la barre de gauche</p>Rest API error UserPasswordEncoder::encodePassword() , message #1763372018-03-25T22:09:47+02:00TetarDeBelhandouz/@TetarDeBelhandouzhttps://zestedesavoir.com/forums/sujet/10465/rest-api-error-userpasswordencoderencodepassword/?page=1#p176337<figure>
<blockquote>
<p>Salut !</p>
<p>Est-ce que tu as bien la partie du code <code>implements UserInterface</code>, avec le bon <code>use Symfony\\Component\\Security\\Core\\User\\UserInterface</code>, et non un autre UserInterface qui ne soit pas le bon ?</p>
</blockquote>
<figcaption><a href="https://zestedesavoir.com/forums/sujet/10465/rest-api-error-userpasswordencoderencodepassword/?page=1#p176336">Ymox</a></figcaption>
</figure>
<p>je suis un noob qui sais pas faire un copier /coller … XD encore dsl </p>Rest API error UserPasswordEncoder::encodePassword() , message #1763362018-03-25T22:08:47+02:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/10465/rest-api-error-userpasswordencoderencodepassword/?page=1#p176336<p>Salut !</p>
<p>Est-ce que tu as bien la partie du code <code>implements UserInterface</code>, avec le bon <code>use Symfony\Component\Security\Core\User\UserInterface</code>, et non un autre UserInterface qui ne soit pas le bon ?</p>Rest API error UserPasswordEncoder::encodePassword() , message #1763332018-03-25T22:05:23+02:00TetarDeBelhandouz/@TetarDeBelhandouzhttps://zestedesavoir.com/forums/sujet/10465/rest-api-error-userpasswordencoderencodepassword/?page=1#p176333<p>bonjour je suis le tuto <a href="https://zestedesavoir.com/tutoriels/1280/creez-une-api-rest-avec-symfony-3/amelioration-de-lapi-rest/securisation-de-lapi-1-2/#1-connexion-et-deconnexion-avec-une-api">https://zestedesavoir.com/tutoriels/1280/creez-une-api-rest-avec-symfony-3/amelioration-de-lapi-rest/securisation-de-lapi-1-2/#1-connexion-et-deconnexion-avec-une-api</a></p>
<p>mais je me retrouve avec une erreur <code>"Type error: Argument 1 passed to Symfony\\Component\\Security\\Core\\Encoder\\UserPasswordEncoder::encodePassword() must be an instance of Symfony\\Component\\Security\\Core\\User\\UserInterface, instance of AppBundle\\Entity\\User given, called in /Users/tetarbelhandouz/Desktop/ApiTetar/rest_api/src/AppBundle/Controller/UserController.php on line 29",</code> lors de mon envoi avec postman </p>
<p>j ai rajouté le getteur et setteur de plainpassword mais je ne comprend pas d ou vien mon erreur
une idée ? </p>
<hr>
<p>RESOLU</p>
<hr>
<p>j ai oublié le "implements UserInterface" dans USER </p>Bug - Créez une API REST avec Symfony 3, message #1726142018-01-26T16:25:18+01:00Centra59/@Centra59https://zestedesavoir.com/forums/sujet/10186/bug-creez-une-api-rest-avec-symfony-3/?page=1#p172614<p>Bonjour a tous, j’ai suivi le tutoriel mentionné dans le titr, pour intégrer un Bundle de récupération des données d’une appli existante via l’API REST</p>
<p>Je me retrouve bloqué à l’étape de sécurisation des données avec le message suivant </p>
<p>The user provider must be an instance of AuthTokenUserProvider (Symfony\Bridge\Doctrine\Security\User\EntityUserProvider was given)</p>
<p>L’erreur vient de l’AuthTokenAuthenticator lors de l’authentification (authenticateToken)</p>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3
4
5
6
7
8</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="x">if (!$userProvider instanceof AuthTokenUserProvider) {</span>
<span class="x"> throw new \InvalidArgumentException(</span>
<span class="x"> sprintf(</span>
<span class="x"> 'The user provider must be an instance of AuthTokenUserProvider (%s was given).',</span>
<span class="x"> get_class($userProvider)</span>
<span class="x"> )</span>
<span class="x"> );</span>
<span class="x"> }</span>
</pre></div>
</td></tr></table></div>
<p>Sauf que je ne vois pas trop comment règler ce problème, j’ai pourtant suivi a la lettre le tuto </p>
<p>Voici les services créés :</p>
<p>`auth_token_user_provider:
class: RESTBundle\Security\AuthTokenUserProvider
arguments: ["@auth_token_repository", "@user_repository"]
public: false</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14</pre></div></td><td class="code"><div class="codehilite"><pre><span></span>auth_token_repository:
class: Doctrine\ORM\EntityManager
factory: ["@doctrine.orm.entity_manager", "getRepository"]
arguments: ["RESTBundle:AuthToken"]
user_repository:
class: Doctrine\ORM\EntityManager
factory: ["@doctrine.orm.entity_manager", "getRepository"]
arguments: ["RESTBundle:User"]
auth_token_authenticator:
class: RESTBundle\Security\AuthTokenAuthenticator
arguments: ["@security.http_utils"]
public: false`
</pre></div>
</td></tr></table>
<p>Merci pour votre aide</p> Créez une API REST avec Symfony 3 : problème avec les version récentes ? view_response_listener mène à une erreur, message #1711782018-01-12T07:46:59+01:00olganazo/@olganazohttps://zestedesavoir.com/forums/sujet/9962/creez-une-api-rest-avec-symfony-3-probleme-avec-les-version-recentes-view_response_listener-mene-a-une-erreur/?page=1#p171178<p>J’ai lu un article intéressant sur beInSport qui a mis en place cette solution.
J’imagine qu’ils avaient un besoin complexe.</p>
<p><a href="https://fr.slideshare.net/SmileOpenSource/a-high-profile-project-with-symfony-and-api-platform-bein-sports">https://fr.slideshare.net/SmileOpenSource/a-high-profile-project-with-symfony-and-api-platform-bein-sports</a></p> Créez une API REST avec Symfony 3 : problème avec les version récentes ? view_response_listener mène à une erreur, message #1711122018-01-11T21:04:23+01:00John/@Johnhttps://zestedesavoir.com/forums/sujet/9962/creez-une-api-rest-avec-symfony-3-probleme-avec-les-version-recentes-view_response_listener-mene-a-une-erreur/?page=1#p171112<p>Salut,</p>
<p>C’est ce que je disais : api-platform est vraiment bien quand tu as un besoin basique, un peu de config, quelques entités, et le tour est joué. Quand le besoin est plus poussé, c’est bien aussi, mais ça nécessite du code en plus.</p>
<p>Bon courage à toi pour la suite. <img alt=":)" src="/static/smileys/smile.png"></p> Créez une API REST avec Symfony 3 : problème avec les version récentes ? view_response_listener mène à une erreur, message #1709722018-01-10T20:21:49+01:00olganazo/@olganazohttps://zestedesavoir.com/forums/sujet/9962/creez-une-api-rest-avec-symfony-3-probleme-avec-les-version-recentes-view_response_listener-mene-a-une-erreur/?page=1#p170972<p>Julien un immense merci car ca marche enfin !</p>
<p>John, merci je ne connaissais pas API.plateform. Ca l’air très bien, j’ai fait quelques test, effectivement on arrive vite a un resultat.
par contre je me sens moins à l’aise par rapport à des choses plus sophistiquées que je veux faire.</p>
<p>Je suis déjà partiellement nouvelle sur Symfony, avant je travaillais plutot sur ZEnd et en ce moment je suis plus sur du dev android alors ca fait beaucoup, je crois que je vais rester sur quelque chose qui je maitrise un peu et qui est assez documenté (je veux dire hors doc officiele).</p>
<p>Merci à tous les deux !</p> Créez une API REST avec Symfony 3 : problème avec les version récentes ? view_response_listener mène à une erreur, message #1702172018-01-04T13:10:42+01:00julien.tricard/@julien.tricardhttps://zestedesavoir.com/forums/sujet/9962/creez-une-api-rest-avec-symfony-3-probleme-avec-les-version-recentes-view_response_listener-mene-a-une-erreur/?page=1#p170217<p>Pas besoin, j’avais le même souci et je viens de le résoudre (sous sf4, mais je pense que ça fonctionne pour le 3) :
Dans l’annotation @Rest\View, il faut rajouter l’option populateDefaultVars=false
Le résultat sera :</p>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3
4
5</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="x"> /**</span>
<span class="x"> *</span>
<span class="x"> * @Rest\View(populateDefaultVars=false)</span>
<span class="x"> * @Rest\Get("/users")</span>
<span class="x"> */</span>
</pre></div>
</td></tr></table></div>
<p>J’espère que ça fonctionnera pour toi</p> Créez une API REST avec Symfony 3 : problème avec les version récentes ? view_response_listener mène à une erreur, message #1700592018-01-03T10:07:07+01:00John/@Johnhttps://zestedesavoir.com/forums/sujet/9962/creez-une-api-rest-avec-symfony-3-probleme-avec-les-version-recentes-view_response_listener-mene-a-une-erreur/?page=1#p170059<p>Salut,</p>
<p>Le tuto est très bien fait, mais pourquoi ne pas se tourner vers <a href="https://api-platform.com">api-platform</a> ? C’est compatible SF4, c’est mis à jour, c’est recommandé par Sensio et surtout pour un besoin basique, un peu de config, quelques entités et l’API fonctionne.</p> Créez une API REST avec Symfony 3 : problème avec les version récentes ? view_response_listener mène à une erreur, message #1699062018-01-01T10:42:36+01:00olganazo/@olganazohttps://zestedesavoir.com/forums/sujet/9962/creez-une-api-rest-avec-symfony-3-probleme-avec-les-version-recentes-view_response_listener-mene-a-une-erreur/?page=1#p169906<p>Bonjour et bonne année à tous,</p>
<p>Bravo pour le tuto Créez une API REST avec Symfony 3 qui est vraiment super bien fait.
Je l’avais suivi avec succès il y a un peu plus d’un an.</p>
<p>Ayant un nouveau besoin, je m’y suis remis et ca ne marche plus du tout.
J’en suis au tout début, la mise en place du premier get marche bien tant que j’utilise la mécanique de vues de FosResBundle</p>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="x"> // Récupération du view handler</span>
<span class="x"> $viewHandler = $this->get('fos_rest.view_handler');</span>
<span class="x"> // Création d'une vue FOSRestBundle</span>
<span class="x"> $view = View::create($formatted);</span>
<span class="x"> $view->setFormat('json');</span>
<span class="x"> // Gestion de la réponse</span>
<span class="x"> return $viewHandler->handle($view);</span>
<span class="x">`</span>
</pre></div>
</td></tr></table></div>
<p>mais dès que je mets l’anotation pour la vue dès la première étape j’ai un plantage</p>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="cp"><?php</span>
<span class="k">namespace</span> <span class="nx">App\Controller</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">FOS\RestBundle\Controller\FOSRestController</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Symfony\Component\HttpFoundation\JsonResponse</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Symfony\Component\HttpFoundation\Request</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Symfony\Component\HttpFoundation\Response</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">FOS\RestBundle\View\View</span><span class="p">;</span> <span class="c1">// Utilisation de la vue de FOSRestBundle</span>
<span class="k">use</span> <span class="nx">FOS\RestBundle\Controller\Annotations</span> <span class="k">as</span> <span class="nx">Rest</span><span class="p">;</span> <span class="c1">// alias pour toutes les annotations</span>
<span class="k">use</span> <span class="nx">App\Entity\User</span><span class="p">;</span>
<span class="k">class</span> <span class="nc">UserController</span> <span class="k">extends</span> <span class="nx">FOSRestController</span>
<span class="p">{</span>
<span class="sd">/**</span>
<span class="sd"> *</span>
<span class="sd"> * @Rest\View</span>
<span class="sd"> * @Rest\Get("/users")</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getUsersAction</span><span class="p">(</span><span class="nx">Request</span> <span class="nv">$request</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$users</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">getDoctrine</span><span class="p">()</span>
<span class="o">-></span><span class="na">getRepository</span><span class="p">(</span><span class="nx">User</span><span class="o">::</span><span class="na">class</span><span class="p">)</span>
<span class="o">-></span><span class="na">findAll</span><span class="p">();</span>
<span class="cm">/* @var $users User[] */</span>
<span class="nv">$formatted</span> <span class="o">=</span> <span class="p">[];</span>
<span class="k">foreach</span> <span class="p">(</span><span class="nv">$users</span> <span class="k">as</span> <span class="nv">$user</span><span class="p">)</span> <span class="p">{</span>
<span class="nv">$formatted</span><span class="p">[]</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">'id'</span> <span class="o">=></span> <span class="nv">$user</span><span class="o">-></span><span class="na">getId</span><span class="p">(),</span>
<span class="s1">'firstname'</span> <span class="o">=></span> <span class="nv">$user</span><span class="o">-></span><span class="na">getFirstname</span><span class="p">(),</span>
<span class="s1">'lastname'</span> <span class="o">=></span> <span class="nv">$user</span><span class="o">-></span><span class="na">getLastname</span><span class="p">(),</span>
<span class="s1">'email'</span> <span class="o">=></span> <span class="nv">$user</span><span class="o">-></span><span class="na">getEmail</span><span class="p">(),</span>
<span class="p">];</span>
<span class="p">}</span>
<span class="c1">// Création d'une vue FOSRestBundle</span>
<span class="nv">$view</span> <span class="o">=</span> <span class="nx">View</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="nv">$formatted</span><span class="p">);</span>
<span class="nv">$view</span><span class="o">-></span><span class="na">setFormat</span><span class="p">(</span><span class="s1">'json'</span><span class="p">);</span>
<span class="k">return</span> <span class="nv">$view</span><span class="p">;</span>
<span class="c1">//return $users;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * @Rest\View()</span>
<span class="sd"> * @Rest\Get("/users/{id}")</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getUserAction</span><span class="p">(</span><span class="nx">Request</span> <span class="nv">$request</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$user</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">getDoctrine</span><span class="p">()</span>
<span class="o">-></span><span class="na">getRepository</span><span class="p">(</span><span class="nx">User</span><span class="o">::</span><span class="na">class</span><span class="p">)</span>
<span class="o">-></span><span class="na">find</span><span class="p">(</span><span class="nv">$request</span><span class="o">-></span><span class="na">get</span><span class="p">(</span><span class="s1">'id'</span><span class="p">));</span>
<span class="cm">/* @var $user User */</span>
<span class="k">if</span> <span class="p">(</span><span class="k">empty</span><span class="p">(</span><span class="nv">$user</span><span class="p">))</span> <span class="p">{</span>
<span class="k">return</span> <span class="k">new</span> <span class="nx">JsonResponse</span><span class="p">([</span><span class="s1">'message'</span> <span class="o">=></span> <span class="s1">'User not found'</span><span class="p">],</span> <span class="nx">Response</span><span class="o">::</span><span class="na">HTTP_NOT_FOUND</span><span class="p">);</span>
<span class="p">}</span>
<span class="nv">$formatted</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">'id'</span> <span class="o">=></span> <span class="nv">$user</span><span class="o">-></span><span class="na">getId</span><span class="p">(),</span>
<span class="s1">'firstname'</span> <span class="o">=></span> <span class="nv">$user</span><span class="o">-></span><span class="na">getFirstname</span><span class="p">(),</span>
<span class="s1">'lastname'</span> <span class="o">=></span> <span class="nv">$user</span><span class="o">-></span><span class="na">getLastname</span><span class="p">(),</span>
<span class="s1">'email'</span> <span class="o">=></span> <span class="nv">$user</span><span class="o">-></span><span class="na">getEmail</span><span class="p">(),</span>
<span class="p">];</span>
<span class="c1">// Création d'une vue FOSRestBundle</span>
<span class="nv">$view</span> <span class="o">=</span> <span class="nx">View</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="nv">$formatted</span><span class="p">);</span>
<span class="nv">$view</span><span class="o">-></span><span class="na">setFormat</span><span class="p">(</span><span class="s1">'json'</span><span class="p">);</span>
<span class="k">return</span> <span class="nv">$view</span><span class="p">;</span>
<span class="c1">//return $user;</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
</td></tr></table></div>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="x"> (1/1) ContextErrorException</span>
<span class="x">Warning: ReflectionObject::__construct() expects parameter 1 to be object, null given</span>
<span class="x">in ViewResponseListener.php (line 162)</span>
<span class="x">at ViewResponseListener->getDefaultVars(object(View), null, null)in ViewResponseListener.php (line 100)</span>
<span class="x">at ViewResponseListener->onKernelView(object(GetResponseForControllerResultEvent), 'kernel.view', object(ContainerAwareEventDispatcher))in EventDispatcher.php (line 212)</span>
<span class="x">at EventDispatcher->doDispatch(array(array(object(ViewResponseListener), 'onKernelView')), 'kernel.view', object(GetResponseForControllerResultEvent))in EventDispatcher.php (line 44)</span>
<span class="x">at EventDispatcher->dispatch('kernel.view', object(GetResponseForControllerResultEvent))in HttpKernel.php (line 156)</span>
<span class="x">at HttpKernel->handleRaw(object(Request), 1)in HttpKernel.php (line 68)</span>
<span class="x">at HttpKernel->handle(object(Request), 1, true)in Kernel.php (line 202)</span>
<span class="x">at Kernel->handle(object(Request))in index.php (line 37)</span>
</pre></div>
</td></tr></table></div>
<p>Configuration des bundles</p>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 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</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="x">fos_rest:</span>
<span class="x"> routing_loader:</span>
<span class="x"> default_format: json</span>
<span class="x"> view:</span>
<span class="x"> default_engine: twig</span>
<span class="x"> view_response_listener: 'force'</span>
<span class="x"> formats:</span>
<span class="x"> json: true</span>
<span class="x"> xml: true</span>
<span class="x"> templating_formats:</span>
<span class="x"> html: true</span>
<span class="x"> body_listener: true</span>
<span class="x"> format_listener:</span>
<span class="x"> rules:</span>
<span class="x"> # instead of the the twig controller it can also be 'fos_rest.exception.controller:showAction' if the TwigBundle</span>
<span class="x"> # is not enabled or a custom exception controller that you configured in fos_rest.exception.exception_controller</span>
<span class="x"> - { path: ^/, fallback_format: json, attributes: { _controller: 'fos_rest.exception.twig_controller:showAction' } }</span>
<span class="x"> - { path: ^/, fallback_format: html }</span>
<span class="x"> service:</span>
<span class="x"> view_handler: fos_rest.view_handler.default </span>
<span class="x">sensio_framework_extra:</span>
<span class="x"> view: { annotations: true }</span>
<span class="x"> router: { annotations: true } </span>
</pre></div>
</td></tr></table></div>
<p>Ma configuration :</p>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="x">Symfony 3.4.2 (kernel: src, env: dev, debug: true)</span>
<span class="x">doctrine/annotations v1.6.0 Docblock Annotations Parser</span>
<span class="x">friendsofsymfony/rest-bundle 2.3.0 This Bundle provides various...</span>
<span class="x">jms/serializer 1.10.0 Library for (de-)serializing...</span>
<span class="x">jms/serializer-bundle 2.3.1 Allows you to easily seriali...</span>
<span class="x">sensio/framework-extra-bundle v5.1.3 This bundle provides a way t...</span>
<span class="x">symfony/framework-bundle v3.4.2 Symfony FrameworkBundle</span>
<span class="x">symfony/routing v3.4.2 Symfony Routing Component</span>
<span class="x">twig/twig v2.4.4 Twig, the flexible, fast, an...</span>
<span class="x">`</span>
</pre></div>
</td></tr></table></div>
<p>Ca fait deux jours que je me casse la tete dessus. J’ai essayé toute sortes de choses et beaucoup de variantes de la configuration.</p>
<p>j’avais fait un premier test avec symfony 4 mais j’ai eu des problèmes bien avant cette étape et j’ai cru lire que FosRestBundle n’était pas compatible avec la V4 ce qui m’a poussé à travailler avec la v3.4.2 </p>
<p>Merci d’avance pour votre aide.</p>
<p>Nat</p>Créer une API Rest avec Symfony 3, message #1572602017-07-21T09:20:10+02:00thibault.falque/@thibault.falquehttps://zestedesavoir.com/forums/sujet/9002/creer-une-api-rest-avec-symfony-3/?page=1#p157260<p>Bonjour,
J’ai un petit problème similaire à <a href="https://zestedesavoir.com/forums/sujet/7762/creer-un-api-rest-avec-symfony-3/">celui-ci</a> mais la solution proposée ne corresponds pas à mon problème.</p>
<p>Je suis sur la partie sécurisation de l’api du tutoriel de création d’une API du <a href="https://zestedesavoir.com/tutoriels/1280/creez-une-api-rest-avec-symfony-3/">site </a>. </p>
<p>Actuellement le résultat de la réponse est vide que ce soit quand l’authentification échoue ou réussi. Plus exactement: <img alt="401" src="http://hpics.li/8ddb7e2">
<img alt="201" src="http://hpics.li/c62c4b0"></p>
<p>Voici mon contrôleur pour la route auth-token:</p>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 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</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="x"> /**</span>
<span class="x"> * @Rest\View(statusCode=Response::HTTP_CREATED, serializerGroups={"auth-token"})</span>
<span class="x"> * @Rest\Post("/auth-tokens")</span>
<span class="x"> * @param Request $request</span>
<span class="x"> * @return AuthToken|\FOS\RestBundle\View\View</span>
<span class="x"> */</span>
<span class="x"> public function postAuthTokensAction(Request $request)</span>
<span class="x"> {</span>
<span class="x"> $credentials = new Credentials();</span>
<span class="x"> $form = $this->createForm(CredentialsType::class, $credentials);</span>
<span class="x"> $form->submit($request->request->all());</span>
<span class="x"> if (!$form->isValid()) {</span>
<span class="x"> return \FOS\RestBundle\View\View::create(['message' => 'Invalid form'], Response::HTTP_BAD_REQUEST);</span>
<span class="x"> }</span>
<span class="x"> $em = $this->get('doctrine.orm.entity_manager');</span>
<span class="x"> $user = $em->getRepository('AppBundle:User')</span>
<span class="x"> ->findOneByEmail($credentials->getEmail());</span>
<span class="x"> if (!$user) { // L'utilisateur n'existe pas</span>
<span class="x"> return $this->invalidCredentials();</span>
<span class="x"> }</span>
<span class="x"> $encoder = $this->get('security.password_encoder');</span>
<span class="x"> $isPasswordValid = $encoder->isPasswordValid($user, $credentials->getPassword());</span>
<span class="x"> if (!$isPasswordValid) { // Le mot de passe n'est pas correct</span>
<span class="x"> return $this->invalidCredentials();</span>
<span class="x"> }</span>
<span class="x"> $authToken = new AuthToken();</span>
<span class="x"> $authToken->setValue(base64_encode(random_bytes(50)));</span>
<span class="x"> $authToken->setCreatedAt(new \DateTime('now'));</span>
<span class="x"> $authToken->setUser($user);</span>
<span class="x"> $em->persist($authToken);</span>
<span class="x"> $em->flush();</span>
<span class="x"> return $authToken;</span>
<span class="x"> }</span>
</pre></div>
</td></tr></table></div>
<p>Je me suis demandé si cela ne pouvait pas venir de la configuration du sérialiseur dont voici la configuration dans le bon chemin: </p>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 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</pre></div></td><td class="code"><div class="codehilite"><pre><span></span>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']
`
</pre></div>
</td></tr></table></div>
<p>Ma version de symfony est la v3.3.5 et j’ai bien vidé le cache. </p>
<p>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. </p>
<p>Mon front est en angular et j’utilise le template ng2-admin, je ne sais pas si cela peut aider. </p>
<p>Merci pour votre aide. </p>
<p>Thibault. </p>[BUG] tutoriel API REST avec Symfony 3, message #1508292017-05-20T15:51:57+02:00gustavi/@gustavihttps://zestedesavoir.com/forums/sujet/8640/bug-tutoriel-api-rest-avec-symfony-3/?page=1#p150829<p>Bonjour,</p>
<p>Ce forum concerne les bugs et suggestions liés au site (d’un point de vue technique) et non les contenus. Je t’invite à poster ton message dans les commentaires dur tutoriel en question. <img alt=":)" src="/static/smileys/smile.png"></p>[BUG] tutoriel API REST avec Symfony 3, message #1508212017-05-20T14:11:02+02:00AlexisMrc/@AlexisMrchttps://zestedesavoir.com/forums/sujet/8640/bug-tutoriel-api-rest-avec-symfony-3/?page=1#p150821<p>Bonjour !
Dans le tutoriel Créez une API REST avec Symfony 3, il me semble qu’il y ai une erreur de code dans le section : Créez une API REST avec Symfony 3 Développement de l’API REST > Premières interactions avec les ressources</p>
<p>Ce code ne fonctionne pas chez moi </p>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3
4
5
6
7
8</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="x"> public function getPlacesAction(Request $request)</span>
<span class="x"> {</span>
<span class="x"> return new JsonResponse([</span>
<span class="x"> new Place("Tour Eiffel", "5 Avenue Anatole France, 75007 Paris"),</span>
<span class="x"> new Place("Mont-Saint-Michel", "50170 Le Mont-Saint-Michel"),</span>
<span class="x"> new Place("Château de Versailles", "Place d'Armes, 78000 Versailles"),</span>
<span class="x"> ]);</span>
<span class="x"> }</span>
</pre></div>
</td></tr></table></div>
<p>Mais ce code semble etre correct :</p>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="x">public function getPlacesAction(Request $request)</span>
<span class="x"> {</span>
<span class="x"> $places = [</span>
<span class="x"> new Place("Tour Eiffel", "5 Avenue Anatole France, 75007 Paris"),</span>
<span class="x"> new Place("Mont-Saint-Michel", "50170 Le Mont-Saint-Michel"),</span>
<span class="x"> new Place("Château de Versailles", "Place d'Armes, 78000 Versailles"),</span>
<span class="x"> ]</span>
<span class="x"> $formatted = [];</span>
<span class="x"> foreach ($places as $place) {</span>
<span class="x"> $formatted[] = [</span>
<span class="x"> 'id' => $place->getId(),</span>
<span class="x"> 'name' => $place->getName(),</span>
<span class="x"> 'address' => $place->getAddress(),</span>
<span class="x"> ];</span>
<span class="x"> }</span>
<span class="x"> return new JsonResponse($formatted);</span>
<span class="x"> }</span>
</pre></div>
</td></tr></table></div>
<p>Voilà !</p>À propos de - Créez une API REST avec Symfony 3, message #1329152016-11-28T18:37:14+01:00BestCoder/@BestCoderhttps://zestedesavoir.com/forums/sujet/7408/a-propos-de-creez-une-api-rest-avec-symfony-3/?page=1#p132915<p>oui, il faut un nouveau sujet si la question nest pas la même.</p>À propos de - Créez une API REST avec Symfony 3, message #1329122016-11-28T17:51:31+01:00sm@il/@sm%40ilhttps://zestedesavoir.com/forums/sujet/7408/a-propos-de-creez-une-api-rest-avec-symfony-3/?page=1#p132912<p>Salut BestCoder,</p>
<p>Merci pour la réponse.</p>
<p>Je comprends pas je suis bien dans le forum là c'est pas un message privé ???</p>
<p>Tu veux peut être dire qu'il faut créer un nouveau sujet pour chaque question ?</p>À propos de - Créez une API REST avec Symfony 3, message #1329112016-11-28T17:43:44+01:00BestCoder/@BestCoderhttps://zestedesavoir.com/forums/sujet/7408/a-propos-de-creez-une-api-rest-avec-symfony-3/?page=1#p132911<p>Ton problème n'est pas lié au REST mais à l'utilisation même de Symfony. Pour que les dates soient considérées comme un seul champ, il faut utilisé l'option <a href="https://symfony.com/doc/current/reference/forms/types/datetime.html#date-widget">date_widget</a> et le mettre à <code>single_text</code>. </p>
<p>Le format de validation pourra ainsi être défini en utilisant l'option <a href="https://symfony.com/doc/current/reference/forms/types/datetime.html#format"><code>format</code></a>.</p>
<p>PS : J'insiste quand même sur le fait que les questions doivent être posées sur le forum.(edit: dans un nouveau sujet)</p>
<p>Cordialement.</p>À propos de - Créez une API REST avec Symfony 3, message #1329032016-11-28T16:37:30+01:00sm@il/@sm%40ilhttps://zestedesavoir.com/forums/sujet/7408/a-propos-de-creez-une-api-rest-avec-symfony-3/?page=1#p132903<p>Bonjour,</p>
<p>Je rencontre un soucis avec le format "datetime" lors des post, j'ai le message suivant : </p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="s2">"dateinscri"</span><span class="o">:</span> <span class="p">{</span>
<span class="s2">"errors"</span><span class="o">:</span> <span class="p">[</span>
<span class="s2">"This value is not valid."</span>
<span class="p">],</span>
<span class="s2">"children"</span><span class="o">:</span> <span class="p">{</span>
<span class="s2">"date"</span><span class="o">:</span> <span class="p">{</span>
<span class="s2">"children"</span><span class="o">:</span> <span class="p">{</span>
<span class="s2">"year"</span><span class="o">:</span> <span class="p">{},</span>
<span class="s2">"month"</span><span class="o">:</span> <span class="p">{},</span>
<span class="s2">"day"</span><span class="o">:</span> <span class="p">{}</span>
<span class="p">}</span>
<span class="p">},</span>
<span class="s2">"time"</span><span class="o">:</span> <span class="p">{</span>
<span class="s2">"children"</span><span class="o">:</span> <span class="p">{</span>
<span class="s2">"hour"</span><span class="o">:</span> <span class="p">{},</span>
<span class="s2">"minute"</span><span class="o">:</span> <span class="p">{}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">},</span>
</pre></div>
</td></tr></table>
<p>Pourtant j'entre bien un datetime au bon format : </p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="s2">"dateinscri"</span><span class="o">:</span> <span class="s2">"2016-11-25 12:00:00"</span><span class="p">,</span>
</pre></div>
</td></tr></table>
<p>J'ai meme essayé tous les formats de la doc php…</p>
<p>Auriez-vous svp une idées d'où pourrait provenir le problème ?</p>À propos de - Créez une API REST avec Symfony 3, message #1325452016-11-24T22:02:38+01:00sm@il/@sm%40ilhttps://zestedesavoir.com/forums/sujet/7408/a-propos-de-creez-une-api-rest-avec-symfony-3/?page=1#p132545<p>Bonjour, je poste un échange que j'ai eu avec BestCoder par MP :</p>
<p>Bonjour,</p>
<p>D'abord merci pour ce super tutoriel.</p>
<p>Ensuite je voulais te faire part d'un problème que je rencontre avec la sécurisation de l'api, en effet la méthode getPlainPassword n'est pas reconnue dans le contrôleur, un message m'indique que la méthode n'est pas dans l'entité Utilisateur, pourtant tu indique bien que l'attribut plainPassword n'est pas sauvegardé en base et du coup quand je mets à jour la bd ça génère bien la password et pas plainPassword et quand je génère les entities, plainPssword n'a pas de getters et setters… Je te laisse voir le code en bas, j'ai dû rater une étape surement mais pourtant vérifier plusieurs fois et j'ai pas l'impression d'avoir omis quelque chose…</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="x">$form->submit($request->request->all());</span>
<span class="x"> if ($form->isValid()){</span>
<span class="x"> $encoder = $this->get('security.password_encoder');</span>
<span class="x"> // le mot de passe en claire est encodé avant la sauvegarde</span>
<span class="x"> $encoded = $encoder->encodePassword($utilisateur, $utilisateur->getPlainPassword());</span>
<span class="x"> $utilisateur->setPassword($encoded);</span>
<span class="x"> $em = $this->get('doctrine.orm.entity_manager');</span>
<span class="x"> $em->persist($utilisateur);</span>
<span class="x"> $em->flush();</span>
<span class="x"> return $utilisateur;</span>
<span class="x"> } else {</span>
<span class="x"> return $form;</span>
<span class="x"> }</span>
</pre></div>
</td></tr></table>
<p>Salut,</p>
<p>Il est toujours préférable de poser les questions sur le forum afin que tout le monde puisse t'aider et profiter de la réponse.</p>
<p>Pour le comportement du champ plainPassword c'est normal. On ne stocke jamais le mot de passe en clair dans la base de données. C'est marqué dans le tutoriel.</p>
<p>L'attribut plainPassword ne sera pas sauvegardé en base. Il nous permettra de conserver le mot de passe de l'utilisateur en clair à sa création ou modification.
Partie "Login et mot de passe pour les utilisateurs"</p>
<p>Pour les getters et setters de plainPassword, il faut les créer manuellement. La commande generate entities ne gére que les attributs avec des annotations Doctrine. Et ici, on ne veut pas que doctrine gére l'attribut plainPassword pour nous.</p>À propos de - Créez une API REST avec Symfony 3, message #1322642016-11-23T10:26:12+01:00BestCoder/@BestCoderhttps://zestedesavoir.com/forums/sujet/7408/a-propos-de-creez-une-api-rest-avec-symfony-3/?page=1#p132264<p>Je pense aussi à rajouter une petite FAQ dans le tuto pour expliquer rapidement ce genre de cas. J'ai conçu le tuto en considérant que l'application Symfony ne permettra de gérer que la partie API mais souvent elle est aussi utilisée pour gérer les vues JS/HTML d'où ce type de question.</p>