Symfony2 Application RESTful l'authentification, à l'aide de FOSRestBundle et FOSUserBundle
Je suis en train de faire API REST pour mon JS application gérée par.
Lors de la connexion, le formulaire de connexion est soumis via AJAX url /rest/login
de mon API.
- Si la connexion est réussie, elle renvoie 204
- Si elle échoue, elle renvoie 401
Que je m'en suis séparé de pare-feu pour l'API et de l'application elle-même, ils partagent le même contexte, ce qui signifie, que lorsque l'utilisateur s'authentifie à l'encontre de l'API, il est authentifié à l'encontre de l'application trop. Ainsi, lorsque le serveur renvoie 204, page sera actualisée et il doit rediriger l'utilisateur de l'application, car il est maintenant connecté.
J'ai essayé d'utiliser pré-faites check_login
page de la FOSUserBundle et a souligné /rest/login
là.
login:
path: /rest/login
defaults:
_controller: FOSUserBundle:Security:check
methods: [ POST ]
Qui ne fonctionne pas, car elle renvoie toujours rediriger, n'importe quoi. J'ai lu la documentation de symfony et ne pouvait pas trouver, comment faire un personnalisé check_login
page. Ce dont j'ai besoin est quelque chose comme cela
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use FOS\RestBundle\Controller\Annotations\View;
class SecurityController {
/**
* @View(statusCode=204)
*/
public function loginAction($username, $password) {
/* first I need to somehow authenticate user
using normal authentication, that I've set up */
...
/* Then I need to return 204 or throw exception,
based on result.
This is done using FOSRestBundle and it's
listeners. */
if(!$succesful) {
throw new AuthenticationException();
}
}
}
Je n'ai pas la moindre idée de comment le faire. Rien de ce que j'ai trouvé dans toute la documentation m'a aidé un peu. Je serai reconnaissant pour toute suggestion serait de me pointer dans la bonne direction.
EDIT: Pour simplifier, ce que je vise. Je veux que ma connexion à fonctionner exactement la même que la normale form_login. Je veux seulement changer la réponse, qu'il envoie en retour - au lieu de rediriger je veux 204 sur la réussite et 401 en cas d'échec.
Vous devez vous connecter pour publier un commentaire.
J'ai été capable de trouver une solution simple. J'ai seulement besoin d'écrire une classe qui implémente
AuthenticationSuccessHandlerInterface
etAuthenticationFailureHandlerInterface
.Puis je me suis inscrit en tant que service et configuré en tant que gestionnaires pour les pare-feu.
Problème résolu et pas compliqué fournisseur d'authentification nécessaire 🙂
J'ai compris votre problème parce que je suis passé par une situation similaire mais avec du SAVON services. Dans le milieu, je pouvais la recherche de la sécurité wsse et Symfony2 a déjà fournit une solution
http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html
Il fonctionne avec un réel gage et vous pouvez correspondre avec un utilisateur dans FOSUserBundle. La seule chose que je vois, c'est le champ "mot de passe" que vous souhaitez comparer est la même que dans la base de données avec le chiffrement) alors j'ai décidé de créer un champ supplémentaire uniquement pour cet usage.
J'espère que cela vous aidera.
Salutations