登录/注册表单的 REST 资源

Posted

技术标签:

【中文标题】登录/注册表单的 REST 资源【英文标题】:REST resources for a login/registration form 【发布时间】:2019-05-26 20:19:56 【问题描述】:

我想创建 REST 登录/注册 URI,以便让现有用户登录或新用户注册。经过一番搜索,我发现大多数此类表单都是使用以下规则设计的:

GET /login获取登录资源

POST /login 登录并取回用户配置文件资源

GET /register获取注册资源

POST /register注册并取回新的用户配置文件资源

但是,我认为这不是 100% 的 REST 方法,因为 REST 的规则之一是资源应该是名词而不是动词(除了一些特殊情况,如搜索 api)。这种情况的最佳解决方案是什么?

【问题讨论】:

【参考方案1】:

没有一个正确的答案,所以我将尝试就解决这个问题的常用方法提供一些想法。

登录

登录(又名身份验证)本身通常以非 RESTful 方式处理,例如 OAuth2。如果 HTTP 是无状态的,真的应该有一个“登录”吗?每个请求都应携带所有信息,以允许服务器对客户端进行身份验证。如果您确实想真正将登录作为 RESTful 端点来处理,您可以问自己:“我在改变什么状态?回答这个问题的一种方法是,您可能创建一组凭据”。我现在假设您正在寻找一种最佳实践/通用方法,而不是一种非常纯粹的 REST 方法。

当前用户信息

获取当前用户通常通过/current-user/whoami 等端点处理。对此执行GET 请求可能会产生有关用户的信息,也可能会立即重定向到规范的用户端点,例如/users/1234。执行PUT 请求可以再次更新用户,或者返回到实际用户端点的重定向。

注册

如果您在/users 等资源上有用户列表。通过对此集合执行POST 请求来创建新的用户资源是有意义的。

【讨论】:

以上是关于登录/注册表单的 REST 资源的主要内容,如果未能解决你的问题,请参考以下文章

Django Social登录/注册使用rest框架

如何在 django admin 的注册表单中删除用户名字段?

注册后 Django Rest Framework 无法登录

如何在rest框架中为我的注册视图编写登录视图?

使用django-rest-auth自带登录注册api

Woocommerce Rest API v2 中用户登录/注册的端点