【发布时间】:2017-01-04 08:28:36
【问题描述】:
我正在用 PHP 创建一个 REST API,但在理解我必须对过期令牌做什么的概念时遇到了一些问题。我有身份验证部分的 MYSQL 和 Json Web 令牌。
数据库结构
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;
登录
我使用用户和密码创建一个 POST 请求,如果验证正确,我返回一个访问令牌(Json Web 令牌),其中包含以下数据:
- 电子邮件
- 姓名
- user_creation_date
- 过期时间
注销 我使用 access_token、device_type 和 user_id 创建了一个 POST 请求。但是如果令牌已经过期了怎么办?我刚刚删除了?
另一个终点
for example
/pets?id=1
我使用 access_token、user_id 和 xx_id 创建了一个 GET 请求,因此在我返回数据之前。我验证令牌是否正确,以及令牌是否对应于发出请求的用户。但是,如果令牌过期了怎么办?我创建另一个?如果我必须返回另一个未过期的令牌,我是否应该注销用户并再次询问密码和电子邮件?
我不明白最好的方法是什么。在我创建的其他关于身份验证的帖子中,许多用户建议我使用第三方身份验证系统,但我想自己开发。
谢谢大家
【问题讨论】:
标签: php api authentication token access-token