REST API端点,用于通过多步骤过程更改电子邮件并更改密码

时间:2017-07-17 09:48:29

标签: node.js rest api

我需要帮助来创建REST端点。有几项活动:

要更改电子邮件,需要3个网址请求:

  1. / changeemail:此处将一次性密码(OTP)发送到用户的手机

  2. / users / email:用户从上一步发送一次性密码,系统将电子邮件发送给新用户,点击电子邮件激活链接

  3. / activateemail:用户点击新电子邮件收件箱中的链接,服务器更新新电子邮件

  4. 更改密码:

    1. / users / password(PATCH):用户提交旧密码和新密码,系统相应更新新密码
    2. 同样,还有其他端点可以更改配置文件(字段包括bday,名字和姓氏)

      在线阅读后,我认为我的系统只有users作为资源 - >所以要更新我想要使用单个PATCH更改电子邮件和更改密码的属性,以及操作字段之类的内容,以便上述两个功能如下所示:

      更改电子邮件:

      1. 操作:'sendOTPForEmailChange'
      2. 操作:'sendEmailActivationLink'
      3. 操作:'activateEmail'
      4. 更改密码:

        1. 操作:'changePassword'
        2. 我将只有一个端点用于上述所有操作(在nodejs中):

          app.patch('/users', function (req, res) {
            // depending upon the operation I delegate it to the respective method
             if (req.body.operation === 'sendOTPForEmailChange') {
                 callMethodA();
             } else if (req.body.operation === 'sendEmailActivationLink') {
               callMethodB();
             } else if (req.body.operation === 'activateEmail') {
                callMethodC();
             } else if (req.body.operation === 'changePassword') {
                callMethodC();
             } else sendReplyError();
          
          });
          

          这听起来不错吗?如果没有,有人可以帮我组建changeemail和changepassword的端点。

          回答

          我最终决定在HTTP Request Body中使用带有操作字段的PATCH来指示必须执行的操作。 由于我只修改了资源的单个字段,因此我使用了PATCH方法。 另外,我想避免在URI中使用Verbs,因此使用'operation'字段看起来更好。

          我在做出这个决定时使用的一些参考文献:

          Wilts回答link here

          Mark Nottingham的博客link article

          最后是JSON MERGE PATCH link RFC

3 个答案:

答案 0 :(得分:4)

您应该创建定义特定资源的链接,避免使用PATCH并在一个链接中添加所有逻辑,保持简单并在API中使用关注点分离 像这样

1- /users/otp with HTTP Verb: GET -> to get OTP for any perpose
2- /users/password/otp with HTTP Verb: POST -> to verify OTP for password and sending link via email
3- /users/activate with HTTP Verb: POST to activate the user
4- /users/password with HTTP Verb: PUT to update users password

答案 1 :(得分:2)

如果你想要实现自己的用户帐户系统,那么

Hashing Security必须阅读,恕我直言 应始终考虑双因素识别,至少作为选择加入功能。您如何将其整合到您的登录方案中? 身份联合怎么样?您的用户可以利用他们的社交帐户来使用您的应用吗?

快速浏览一下Google this and thisas well as this

除非您有充分的理由自己动手,否则我会花时间将强大社区支持的解决方案整合到项目的实用程序方面,并将时间集中在实现您的业务价值上客户。

注意:我的文字对于评论来说太长了

答案 2 :(得分:1)

大多赞同Ghulam的回复,关注点的分离是关键。我建议稍微不同的端点如下:

1. POST /users/otp      -> as we are creating a new OTP which should be returned with 200 response. 
2. POST /users/email    -> to link new email, request to include OTP for verification. 
3. PUT  /users/email    -> to activate the email.
4. PUT  /users/password -> to update users password.