在RESTful API中更改密码(PATCH上的服务器验证)

时间:2016-04-18 09:47:05

标签: rest http authentication web http-patch

在RESTful API中,我在/users/users/:id上拥有用户资源及其用户名,电子邮件地址和密码。

当我想更新用户信息时,我可以轻松地使用PATCH:/users/:idJSONPatch数据进行currentPassword

现在的问题是,我无法弄清楚如何使用newPasswordnewPasswordConfirm和{{1}}形式处理更改密码方案。

应该使用什么方法(PATCH似乎合适但有问题)以及数据应以何种方式传输(正文/标题/...).

在更广泛的范围内 - 如何处理具有更多验证字段的补丁。

This post似乎有关,但并未涵盖这个确切的主题。

2 个答案:

答案 0 :(得分:7)

要部分更新用户资源而不是PATCH,您是否考虑过PUT来替换密码?

您的终端可能是/users/:id/password,其中密码用户资源的子资源。您更换密码的请求如下:

PUT /users/1/password HTTP/1.1
Host: api.example.com
Content-Length: 113
Content-Type: application/json
Authorization: Basic YWRtaW46c2VjcmV0

{
    "currentPassword" : "secret",
    "newPassword": "othersecret",
    "newPasswordConfirm" : "othersecret"
}

答案 1 :(得分:1)

经过深入研究JSONPatch后,我能够提出将test操作添加到补丁数据的方法。

这看起来有点像:

[
    { "op": "test", "path": "/password", "value": "oldPassword" },
    { "op": "replace", "path": "/password", "value": "newPassword" },
    { "op": "test", "path": "/password", "value": "newPasswordConfirm" }
]

使用此方法是否有任何问题?