注册成功
#
存储数据数据的校验已经完成,现在我们进行数据的存储。
打开控制器 application\user\controller\Auth.php
并修改:
此时再重新提交数据,系统会抛出错误 user
表不存在。
ThinkPHP 并未完全遵守前面章节所提到的约定俗称标准。
即 UserModel
对应 users
的约定。
我们现在打开 application\user\model\User.php
并修改:
设置完成之后,再次提交,则会返回类似数据:
这表明我们的数据已经添加进数据库,现在我们打开数据库来查看,会发现 updated_at
字段并未自动维护,我们则需要手动设置维护字段:
现在重新添加提交数据,我们的字段已经自动由框架进行维护了。
可是现在的密码还是明文提交的,我们需要在控制器中对密码进行加密:
这段代码使用了 ThinkPHP Model
提供的修改器功能,setPasswordAttr($value)
可以拆分为 set|Password|Attr
,中部的 Password
就是我们要设置的字段值,同样的,如果我们要设置 name
字段就写入 setnameAttr
就可以了。
password_hash 是 PHP 语言内置的一个非对称加密算法,此加密算法不可逆向,只能通过验证取得。
禁止
在任何时候都不要使用 md5
极其一类的 摘要算法
,它们属于 摘要算法
而不属于 加密算法
,不可用做加密功能。
为了您的生命安全,请牢记此项。
同样的,我们只对邮箱做出了 是否符合邮箱地址规则
的校验,并没有筛选大小写。
现在传入的 email
字段也会自动转化为小写,对提交的数据已经转换完成了,这时候千万不要已经收工,一个潜在的安全漏洞已经出现。
在控制器 application\user\controller\Auth.php
中,我们通过 User::create($requestData);
来批量提交所有的字段。
在数据表中我们有一项 god
字段,目的是判断是否是超级管理员。
如果这时候在前端伪造一个 god
字段进行提交,后果不堪设想,所以我们在入库的时候需要进行字段过滤:
允许用户自主提交的字段就不存在 god
等能够手动提权的操作了。
#
跳转至成功页面前面的数据操作都进行完成之后,我们还剩最后一项跳转的任务:
redirect('user/auth/read')->params(['id' => $user->id])
中 params(['id' => $user->id])
是传递的参数。
当路由的 read
等操作绑定的是 $id
时,我们传入 $id
将会自动跳转到 user/auth/read/$id
。
可是现在跳转过去的页面任然是空白,所以我们需要添加一些操作:
User::find($id)
是模型的一个查询语法,默认查询 $id(主键值)
。
接着创建前端文件:
现在重新注册个用户,即可自动跳转至欢迎页面了。