众所周知,一个成熟的网站必然是支持多种登陆方式的。市场上固然常见的就是有相似于github、微博、qq、微信登陆等。git
因此这些天,我会一一根据这些功能进行实操。昨天完成了微博登陆,今天讲一下字段设计的问题github
一、字段如何合理分开数据库
首先,假设的字段以下:缓存
固然,以上的只是简单的,当依旧如此,也显得字段很是多了。 在 数据库 设计原则中必须有隔离性,大量的字段存在对索引很是不友好,容易形成没必要要的消耗服务器
根据重要性区别:微信
用户名、密码、通讯方式(如做为登陆字段存在的话可存在)、登陆字段1、登陆字段二session
以上,足以知足在登陆条件下的必须,其余的经过关联查询,能够垂手可得的获得函数
关于地址的设计网站
必须将地址另作一张表,不能用户信息共存,地址是一对多的形式存在,能够经过中间表进行关联或者直接关联。加密
二、 如何有效性的解决登陆字段的问题呢
首先,合理共同使用公共代码。
公共代码有哪些呢?
第一步: 获取当前的字段进行用户查询,密码对比,取得登陆验证
/** * 返回登陆的字段类型 * * @param $value * @return bool|mixed|string */ function checkParamType($value) { // 是否邮箱匹配 if( filter_var($value,FILTER_VALIDATE_EMAIL) ) { return 'email'; } // 判断是否手机匹配 $res = filter_var($value,FILTER_CALLBACK,[ 'options' => function ($value){ if( preg_match('/^1[34578]\d{9}$/',$value) ) { return 'phone'; } } ]); return is_null($res) ? false : $res; }
第二步:解决登陆密码校验的问题
我这里将获取用户和密码校验分离开来,经过字段查询到用户,在进行密码校验;未查找到,直接返回没有用户
... public static function store(LoginRequest $request) { $name = $request->name; $password = $request->password; $field = checkParamType($name) ? checkParamType($name) : 'name' ; if( !$user = User::getUserInfo($name,$field) ) { session()->flash('status','用户不存在'); return redirect()->back(); } if( !$user = self::checkPassword($user,$password) ){ session()->flash('status','密码错误'); return redirect()->back(); } \Auth::login($user); return redirect('/'); } ... public static function checkPassword($user, $pwd) { // 加密对比 if( $user->password === eny($pwd,$user->salt)) { return $user; } return false; } ...
注册我采用的是,当第三方登陆受权登陆后,直接给与登陆权限。
注册用户,注册后跳转到登陆页面
我采用了可 邮箱 可手机号码的登陆方式
1) 获取验证码
第一步先,用户须要填写邮箱,点击发送验证码按钮,发送得到验证码。 服务器端收到邮箱后生存缓存有效期,将用户的邮箱写入缓存,同时发送邮箱 用户收到邮箱的验证码,写入注册字段 提交字段,验证相关数据的有效性
短信接口采用的腾讯云平台
原创:转载请联系我 1562135624@qq.com