开始代码部分了,为了好调试,先数据库,再后台,最后前端。
1. 配置环境文件
将thinkphp根目录的.example.env另存为.env,修改里面的连接信息:
APP_DEBUG = true
[APP]
DEFAULT_TIMEZONE = Asia/Shanghai
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = tpdb
USERNAME = 你的账户
PASSWORD = 你的密码
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true
[LANG]
default_lang = zh-cn
2. 初始化数据库
在phpMyAdmin里面新建一个数据库tpdb
将以下内容保存为 tpdb.sql ,然后在phpMyAdmin里导入。
两张表:
- captcha,用来保存验证码的token和明文。
- user,保存用户信息,账号,密码。里面有一个名为admin,密码为888888的账户,供调试用。
一个事件:
- remove_old_captcha,用来定期删除过期的验证码,每隔60秒运行一次,删除超过60秒的数据,所以验证码的有效期为60~120秒之间。注意修改事件运行的账户为你自己的 CREATE DEFINER=`root`@`localhost` EVENT `remove_old_captcha`
--
-- 数据库: `tpdb`
--
-- --------------------------------------------------------
--
-- 表的结构 `captcha`
--
CREATE TABLE `captcha` (
`id` varchar(32) NOT NULL,
`value` varchar(32) NOT NULL,
`ctime` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- --------------------------------------------------------
--
-- 表的结构 `user`
--
CREATE TABLE `user` (
`id` int(10) UNSIGNED NOT NULL,
`name` varchar(20) NOT NULL,
`salt` varchar(32) NOT NULL,
`password` varchar(32) NOT NULL,
`email` varchar(50) DEFAULT NULL,
`mobi` varchar(20) DEFAULT NULL,
`register` varchar(20) DEFAULT NULL,
`modify` varchar(20) DEFAULT NULL,
`last_login` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- 转存表中的数据 `user`
--
INSERT INTO `user` (`id`, `name`, `salt`, `password`, `email`, `mobi`, `register`, `modify`, `last_login`) VALUES
(1, 'admin', '5bc257f9c4e88d9385afb6fb0d93b0b2', '5a68e4720cf7a0971ba0f351a53ad377', NULL, NULL, '1594536420914', '1594536420914', '1594538909345');
--
-- 转储表的索引
--
--
-- 表的索引 `captcha`
--
ALTER TABLE `captcha`
ADD PRIMARY KEY (`id`);
--
-- 表的索引 `user`
--
ALTER TABLE `user`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `name` (`name`);
--
-- 在导出的表使用AUTO_INCREMENT
--
--
-- 使用表AUTO_INCREMENT `user`
--
ALTER TABLE `user`
MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
DELIMITER $$
--
-- 事件
--
CREATE DEFINER=`root`@`localhost` EVENT `remove_old_captcha` ON SCHEDULE EVERY 60 SECOND STARTS '2020-07-12 13:32:14' ON COMPLETION NOT PRESERVE ENABLE DO DELETE from `captcha` WHERE (CURRENT_TIMESTAMP-`captcha`.`ctime`) > 60$$
DELIMITER ;
COMMIT;