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

j10*_*j10 9 api rest node.js

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

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

  1. / changeemail:这里一次性密码(OTP)被发送到用户的手机

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

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

要更改密码:

  1. / users/password(PATCH):用户提交旧密码和新密码,系统相应地更新新密码

同样,还有其他端点可以更改配置文件(字段包括bday,名字和姓氏)

在线阅读后我相信我的系统只users作为资源 - >所以更新属性我正在考虑使用单个PATCH更改电子邮件和更改密码以及操作字段之类的东西,所以上面两个功能看起来像:

要更改电子邮件:

  1. 操作:'sendOTPForEmailChange'
  2. 操作:'sendEmailActivationLink'
  3. 操作:'activateEmail'

更改密码:

  1. 操作:'changePassword'

我将只有一个端点用于上述所有操作(在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();

});
Run Code Online (Sandbox Code Playgroud)

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

答案:

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

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

威尔茨在这里回答链接

Mark Nottingham的博客链接文章

最后是JSON MERGE PATCH 链接RFC

Sum*_*sle 2

恕我直言,如果您想实现自己的用户帐户系统,哈希安全性是必读的。
应始终考虑双因素识别,至少作为一项选择加入功能。您将如何将其集成到您的登录方案中?
身份联合怎么样?您的用户可以利用他们的社交帐户来使用您的应用程序吗?

快速浏览一下 Google 就得到了这个 这个还有这个

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

注意:我的文字太长,无法发表评论

  • 感谢 Sumi 分享链接。我正在使用 bcrypt,目前我们不考虑社交媒体帐户。Sumi,如果您的评论很长,您应该分开,因为如果没有人回答问题,您将获得赏金,而您的回答对我的问题没有帮助。 (2认同)