2010-05-14 3 views
1

J'ai une API RESTful configurée et fonctionnant avec CakePHP en utilisant mapResources() et parseExtensions(). L'authentification est gérée par le composant de sécurité de CakePHP en utilisant HTTP Digest Authentication.L'authentification HTTP Digest échoue avec les paramètres d'URL (CakePHP)

Tout fonctionne très bien, à moins que j'ajouter des paramètres à l'URL, sous la forme:

http://example.com/locations.xml?distance=4 

Ce qui provoque l'échec de l'authentification toujours. Des idées?


Edit: Cela semble être un problème avec l'expression rationnelle dans parseDigestAuthData(). Il y a un demi-fix ici: http://old.nabble.com/paginator-conflicts-with-Security-%3ErequireLogin---td16301573.html ce qui me permet maintenant d'utiliser le format:

http://example.com/locations/index/distance:4/.xml 

Mais ce n'est pas RESTful et ne regarde pas tout ce joli. Encore, se rapprocher!

+0

Si vous croyez que vous pouvez regarder une URL et déclarer 'qui n'est pas RESTful', alors il vous est conseillé de faire plus de lecture sur REST, en supposant que vous voulez obtenir les avantages d'un système RESTful. –

+0

J'étais sous l'hypothèse que la spécification d'une sorte d'action dans l'URI était probablement une mauvaise forme (index dans ce cas), et que la définition de l'action à utiliser était la responsabilité du verbe HTTP. – NathanGaskin

+0

L'url est un identifiant opaque, si le verbe dans l'url est en contradiction avec le verbe utilisé, alors cela va être source de confusion pour le développeur, mais ne brise pas les contraintes REST. Le problème survient lorsque le comportement de la requête n'est pas cohérent avec le verbe HTTP utilisé. –

Répondre

2

Résolu: Problème

/cake/libs/controller/components/security.php:386

changement

preg_match_all('@(\w+)=([\'"]?)([a-zA-Z0-9=./\_-]+)\[email protected]', $digest, $match, PREG_SET_ORDER); 

à

preg_match_all('@(\w+)=([\'"]?)([a-zA-Z0-9=./?&\_-]+)\[email protected]', $digest, $match, PREG_SET_ORDER); 

Les paramètres peuvent maintenant être transmis dans la forme /locations.xml?key=value avec l'authentification Digest activée.

Questions connexes