我正在用PHP创建一个REST API,我在解决与过期令牌有关的概念时遇到了一些问题。我有MYSQL和Json Web Tokens用于身份验证部分。
数据库结构
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`name` varchar(35) CHARACTER SET utf8 NOT NULL,
`lastname` varchar(35) CHARACTER SET utf8 DEFAULT NULL,
`password` text CHARACTER SET utf8 NOT NULL,
`email` varchar(50) CHARACTER SET utf8 NOT NULL,
`gender` enum('male','female') CHARACTER SET utf8 DEFAULT NULL,
`description` text CHARACTER SET utf8,
`email_verification` enum('unverified','verified','','') CHARACTER SET utf8 NOT NULL DEFAULT 'unverified',
`updated` datetime NOT NULL,
`created` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `device_tokens` (
`id` int(11) NOT NULL,
`device_id` tinyint(4) NOT NULL,
`device_version` varchar(10) DEFAULT NULL,
`user_id` int(11) NOT NULL,
`token` text NOT NULL,
`update` datetime NOT NULL,
`created` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
LOGIN
我使用用户和密码创建一个POST请求,如果验证正确,我将返回一个包含以下数据的访问令牌(Json Web Token):
- 电子邮件
- 名称
- user_creation_date
- 到期时间
LOGOUT 我使用access_token,device_type和user_id创建一个POST请求。但是如果令牌已经过期会发生什么?我刚刚删除了?
另一个终点
for example
/pets?id=1
我使用access_token,user_id和xx_id创建一个GET请求,所以在我返回数据之前。我验证令牌是否正确,以及令牌是否与发出请求的用户相对应。但是,如果令牌已过期会发生什么?我又创造了一个?如果我必须返回另一个未到期的令牌,我应该注销用户并再次询问密码和电子邮件吗?
我不明白最好的方法是什么。在我创建的有关身份验证的其他帖子中,许多用户建议我使用第三方身份验证系统,但我想自己开发。
全部谢谢
答案 0 :(得分:1)
通常,如果令牌过期,您应该将其从数据库中删除并注销用户。但是,如果用户处于活动状态,则应该可以在他的服务请求期间延长其访问令牌的生命周期。但是,当引入附加参数刷新令牌时,还有另一种方法。在这种情况下,流程可能如下所示: