踏鸽行2.0开发记录(三)完成身份认证和用户注册部分

分类: 开发笔记

Demo

先放一张图演示一下~

虽然目前就实现了这么一个功能,却也累得我够呛。毕竟是边学习Laravel边搞这个东西。就目前而言,Laravel方便了多少不敢说,但其具有系统的体系结构,绝对可以避免项目做大之后混乱不堪的情况。不过由于我不熟练,属于摸索中前进,也许有很多地方用的不对,有不符Laravel设计理念的地方,也可能导致项目一定程度上的混乱。这些估计还算小事,后期再改也不会特别困难,因为各部分松弛,耦合度不高。

对了,表扬一下学校,昨天统一身份认证平台还没有移动端适配,今天就出现了,真是太让我兴奋了,难得赞一次学校!

设计

路由

Routes

目前设计的Routes路由其实也不是那么合理,自我感觉稍显杂乱,但暂时没有更好的思路,还望指点。

控制器

  • UsersController负责用户的管理:包括注册、修改等;
  • RegisterController负责注册页面的跳转:包括初始页面和详细资料页面的控制;
  • WechatRegister负责和微信打交道:包括接入接口和网页授权认证;
  • AuthRegister负责和统一身份认证平台交互:包括根据学校跳转相应平台和身份验证的控制。

流程说明

注册流程分为两个分支:

  1. 非合作学校,全部资料自行填写,后台志愿者审核;
  2. 合作学校(目前当然只有北师大了~),统一身份认证平台登陆后获取相关资料,剩余必须资料用户补充,提交后立即通过审核。

第一个分支不用多说,最经典的用户注册,无非就是要和微信openid挂钩即可;

第二个分支,统一身份认证平台通过后,用户信息首次被登记到数据库。

这一点和1.0有很大不同,1.0傻傻地只要用户打开踏鸽行页面就把openid登记到数据库,导致数据库有大量无效用户记录(只存了用户的openid),他们大都并无注册意向,只是点开看看而已。

然后页面跳转到详细资料填写页面,补充剩余必须信息,再提交则以修改用户信息的方式补充信息,并修改用户状态,通过用户资料审核(尚未实现)。

用户注册请求

这个请求中验证了发起请求的用户权限,修改用户信息必须满足修改的用户是微信授权的用户自己(后期应加入管理员),如若不满足则403权限不足,重载forbiddenResponse以实现403自定义错误页面。

另外验证提交数据需要满足代码所示条件rules。

class UserRequest extends Request
{
    public function authorize(User $user)
    {
        return (empty($user->id) && empty($this->route('users'))) || ($user->id == $this->route('users'));
    }

    public function rules()
    {
        return [
            'name' => 'required|max:100',
            'gender' => 'required|in:male,female',
            'email' => 'required|email|max:300',
            'mobile' => 'required|digits:11',
            'qq' => 'numeric',
            'school' => 'required|max:100',
            'student_id' => 'required|max:100',
            'student_type' => 'required|max:300',
            'department' => 'max:300',
        ];
    }

    public function forbiddenResponse() 
    {
        return new Response(view('errors.error', ['title' => '权限不足', 'error' => '您的权限不足以编辑该用户的信息!']), 403);
    }
}

视图

Views

  • welcome:laravel自带的欢迎页面,目前以“马上归来”替代主页;
  • errors.503:服务器维护时期的页面,也是“马上归来”,在我不需要测试微信端的时候,服务器一般都处于down的状态;
  • errors.error:自定义错误显示页面;
  • layouts.master:页面母版,包含html框架以及Bootstrap、jQuery等库的引用;
  • register.index:一开始看到的项目宣传和注册引导页面; users.*:用户注册、编辑等页面。