142 votes

Reposant réinitialisation de mot de passe

Quelle est la bonne façon de structurer une bonne ressource pour la réinitialisation d'un mot de passe?

Cette ressource est destinée à être un mot de passe resetter pour quelqu'un qui a perdu ou oublié leur mot de passe. Il permet d'invalider leur ancien mot de passe, e-mails et leur mot de passe.

Les deux options que j'ai sont:

POST /reset_password/{user_name}

ou...

POST /reset_password
   -Username passed through request body

Je suis sûr que la demande devrait être un POST. Je suis moins confiant que j'ai choisi un nom approprié. Et je ne suis pas sûr si le user_name doit être transmis par le biais de l'URL ou le corps de la requête.

66voto

Daniel Vassallo Points 142049

Mise à JOUR: (plus de commentaire ci-dessous)

Je voudrais aller quelque chose comme ceci:

POST /users/{user_name}/reset_password

Vous avez une collection de l'utilisateur, où le seul utilisateur est spécifié par l' {user_name}. Vous devez ensuite spécifier l'action à opérer, qui dans ce cas est - reset_password. C'est comme de dire "Créer (POST) un nouveau reset_password action {user_name}".


La réponse précédente:

Je voudrais aller quelque chose comme ceci:

PUT /users/{user_name}/attributes/password
    -- The "current password" and the "new password" passed through the body

Vous auriez deux collections, les utilisateurs de la collection, et une collection d'attributs pour chaque utilisateur. L'utilisateur est spécifié par l' {user_name} et l'attribut est spécifié par password. L' PUT fonctionnement des mises à jour de la membre de la collection.

21voto

Craig Walker Points 13478

Let's get uber-Sommeil pendant une seconde. Pourquoi ne pas utiliser l'action de SUPPRESSION de mot de passe pour déclencher une réinitialisation? De sens, n'est-ce pas? Après tout, vous êtes effectivement à rejeter le mot de passe existant en faveur d'une autre.

Cela signifie que vous devriez faire:

DELETE /users/{user_name}/password

Maintenant, deux gros bémols:

  1. HTTP SUPPRIMER est censé être idempotent (un bien grand mot pour dire "pas grand-chose si vous le faites plusieurs fois"). Si vous faites de la norme des choses comme l'envoi d'une "Réinitialisation du Mot de passe e-mail, puis vous allez rencontrer des problèmes. Vous pouvez travailler autour de ce marquage de l'utilisateur/mot de passe avec un booléen "Réinitialisation" du pavillon. Sur tous les supprimer, vous vérifiez ce drapeau; si elle n'est pas définie alors vous pouvez réinitialiser le mot de passe et envoyer votre e-mail. (Notez que d'avoir ce drapeau peut avoir d'autres usages aussi.)

  2. Vous ne pouvez pas utiliser HTTP SUPPRIMER par le biais d'un formulaire, de sorte que vous aurez à faire un appel AJAX et/ou le tunnel de la SUPPRIMER par la POSTE.

13voto

orbfish Points 1587

Je suis actuellement à la recherche d'une réponse, pas de sens de lui donner, mais "reset_password" sonne mal à m'en RESTE contexte, car c'est un verbe, pas un nom. Même si vous dites que vous êtes en train de faire une "remise à zéro" nom - à l'aide de cette justification, tous les verbes sont des substantifs.

Aussi, il peut ne pas avoir lieu à une personne à la recherche pour la même réponse que vous pouvez être en mesure d'obtenir le nom d'utilisateur à travers le contexte de sécurité, et ne pas avoir à l'envoyer par le biais de l'url ou le corps, ce qui me rend nerveux.

13voto

Swards Points 3017

Souvent, vous ne voulez pas supprimer ou de détruire de l'utilisateur mot de passe existant sur la demande initiale, car cela peut avoir été déclenchée (accidentellement ou intentionnellement) par un utilisateur qui n'a pas accès à l'e-mail. Au lieu de cela, la mise à jour d'un jeton de réinitialisation de mot de passe sur l'enregistrement de l'utilisateur et envoyer un lien figurant dans un e-mail. En cliquant sur le lien de confirmer que l'utilisateur a reçu le jeton et souhaite mettre à jour leur mot de passe. Idéalement, ce serait temps aussi bien sensibles.

Le repos de l'action dans ce cas serait un POST: le déclenchement de l'action de création sur le contrôleur PasswordResets. L'action elle-même permettrait de mettre à jour le jeton et l'envoyer un e-mail.

2voto

bpeikes Points 93

Je n'aurais pas quelque chose qui change le mot de passe et de les envoyer en un nouveau si vous décidez d'utiliser le dossier /utilisateurs/{id}/mot de passe de la méthode, et s'en tenir à votre idée que la demande est une ressource qui lui est propre. ie /utilisateur-mot de passe-demande/ est la ressource, et permet de METTRE, les infos de l'utilisateur doit être dans le corps. Je ne voudrais pas changer le mot de passe si, Id envoyer un courriel à l'utilisateur qui contient un lien vers une page qui contient un request_guid, qui pourraient être passés avec une demande de POST /utilisateurs/{id}//mot de passe?request_guid=xxxxx

Qui allait changer le mot de passe, et il ne permet pas à quelqu'un tuyau d'un utilisateur en demandant un changement de mot de passe.

Avec les premiers MIS peut échouer si il y a une demande en suspens.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X