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

Change password in RESTful API (Server validation on PATCH)

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

当我想更新用户信息时,我可以很容易地用一些 JSONPatch 数据做 PATCH:/users/:id

现在的问题是我不知道如何处理 更改密码 场景 currentPasswordnewPassword 和 [=18] =] 形式。

应该使用什么METHOD(PATCH似乎合适但有问题)以及数据应该以什么方式传输(body/header/...)。

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

This post 似乎相关但不涵盖这个确切的主题。

而不是PATCH,部分更新用户资源,你有没有考虑过PUT替换密码?

您的端点可以是 /users/:id/password,其中 passworduser 资源的子资源。您的密码替换请求如下:

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"
}

在深入研究 JSONPatch 之后,我想出了向补丁数据添加 test 操作的方法。

这看起来有点像:

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

使用这个方法有什么问题吗?