我在开发一款移动应用程序,需要一个注销服务。登录服务已经通过从数据库进行验证完成,现在我卡在了注销上。
我在开发一款移动应用程序,需要一个注销服务。登录服务已经通过从数据库进行验证完成,现在我卡在了注销上。
你没有提供关于应用程序如何进行身份验证的详细信息,很难猜测你在做什么。
然而,在REST应用程序中,服务器端不应存储任何 会话状态 ,而是必须由客户端 完全处理会话状态。
但是服务器端会话状态有什么问题呢?它们是 有状态的 ,并且会破坏 REST 无状态约束 (阅读更多细节),因此它不符合 REST 的要求。
根据 Roy T. Fielding 的 论文,REST 无状态约束 定义为以下内容:
[...] 客户端到服务器的每个请求必须包含理解该请求所需的所有信息,并且不能利用服务器上的任何存储上下文。因此,会话状态完全保留在客户端中。 [...]
例如,在访问需要身份验证的受保护资源时,每个请求都必须包含 所有必要的数据以正确进行身份验证/授权。并且认证数据应属于标准的 HTTP Authorization
头。根据 RFC 7235:
Authorization
头字段允许用户代理使用起源服务器进行身份验证——通常是在收到401
(未经授权)响应后。它的值由包含用户代理的身份验证信息的凭据组成,用于所请求资源的领域。 [...]
REST是无状态的。没有登录或注销,不涉及“会话”。每个需要身份验证的资源请求都必须携带身份验证数据。会话状态保存在客户端而不是服务器端。
通常情况下,登录应该返回令牌或cookie(如果不是REST风格)。
注销时,令牌应该被作废。
如果使用的是cookie,则可以先在服务器端使会话无效,然后在客户端删除cookie。
针对您的问题,您可以在登录后生成一个新的令牌(唯一随机),并将其保存在新列中,在连续的请求中期望相同的令牌而不是布尔标志。
为了基本的注销,您只需要为该用户删除该令牌。