关于多字段(第三方登陆)字段设计的解决

众所周知,一个成熟的网站必然是支持多种登陆方式的。市场上固然常见的就是有相似于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

相关文章
相关标签/搜索