资讯专栏INFORMATION COLUMN

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

ivydom / 1000人阅读

摘要:昨天完成了微博登录,今天讲一下字段设计的问题字段如何合理分开首先,假设的字段如下用户名密码联系方式头像个人信息性别通信地址年龄第三方登录字段一第三方登录字段二当然,以上的只是简单的,当依旧如此,也显得字段非常多了。

众所周知,一个成熟的网站必然是支持多种登录方式的。市场上当然常见的就是有类似于github、微博、qq、微信登录等。

所以这些天,我会一一根据这些功能进行实操。昨天完成了微博登录,今天讲一下字段设计的问题

1、字段如何合理分开

首先,假设的字段如下:

用户名

密码

联系方式

头像

个人信息

性别

通信地址

年龄

第三方登录字段一

第三方登录字段二

当然,以上的只是简单的,当依旧如此,也显得字段非常多了。 在 数据库 设计原则中必须有隔离性,大量的字段存在对索引非常不友好,容易造成不必要的消耗

根据重要性区别:

用户名、密码、通信方式(如作为登录字段存在的话可存在)、登录字段一、登录字段二

以上,足以满足在登录条件下的必须,其他的通过关联查询,可以轻而易举的得到

关于地址的设计

必须将地址另做一张表,不能用户信息共存,地址是一对多的形式存在,可以通过中间表进行关联或者直接关联。

2、 如何有效性的解决登录字段的问题呢

首先,合理共同使用公共代码。
公共代码有哪些呢?

加密函数 / 比较密码正确性

获取登录字段类型(使用一个函数,判断出当前登录的字段,返回一个字段名即可)

获取用户信息

第一步: 获取当前的字段进行用户查询,密码对比,取得登录验证

/**
 * 返回登录的字段类型
 * 
 * @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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29615.html

相关文章

  • 关于前端接口测试探索和挖坑

    摘要:本文主要关注的是接口测试。所谓接口测试,就是检查系统提供的接口是否符合事先撰写的接口文档。作为接口测试的解决方案,我们必须具备通用性与易用性。 开始 最近几年,前端测试渐渐被人重视,相关的框架和方法已经比较成熟。断言库有should, expect, chai。 单元测试框架有mocha, jasmine, Qunit。 模拟浏览器测试环境有Phantomjs, Slimerjs。 集...

    Crazy_Coder 评论0 收藏0
  • 关于前端接口测试探索和挖坑

    摘要:本文主要关注的是接口测试。所谓接口测试,就是检查系统提供的接口是否符合事先撰写的接口文档。作为接口测试的解决方案,我们必须具备通用性与易用性。 开始 最近几年,前端测试渐渐被人重视,相关的框架和方法已经比较成熟。断言库有should, expect, chai。 单元测试框架有mocha, jasmine, Qunit。 模拟浏览器测试环境有Phantomjs, Slimerjs。 集...

    zxhaaa 评论0 收藏0
  • 如何实现一个楼中楼评论系统

    摘要:我们在使用的很多评论系统中,目前比较流行的就是楼中楼的方式了,比如百度贴吧,等等。同时,无论一级评论,还是楼中楼的评论,都有可能产生分页的情况,因此这里也要做好分页处理。 文章内容由蚊子的博客进行发布,或许你想看看他其他的博客呢: https://www.xiabingbao.com/comments/2017/09/01/blog-comments.html 1. 实现前的思考 在经...

    kohoh_ 评论0 收藏0
  • 如何实现一个楼中楼评论系统

    摘要:我们在使用的很多评论系统中,目前比较流行的就是楼中楼的方式了,比如百度贴吧,等等。同时,无论一级评论,还是楼中楼的评论,都有可能产生分页的情况,因此这里也要做好分页处理。 文章内容由蚊子的博客进行发布,或许你想看看他其他的博客呢: https://www.xiabingbao.com/comments/2017/09/01/blog-comments.html 1. 实现前的思考 在经...

    番茄西红柿 评论0 收藏0
  • 如何实现一个楼中楼评论系统

    摘要:我们在使用的很多评论系统中,目前比较流行的就是楼中楼的方式了,比如百度贴吧,等等。同时,无论一级评论,还是楼中楼的评论,都有可能产生分页的情况,因此这里也要做好分页处理。 文章内容由蚊子的博客进行发布,或许你想看看他其他的博客呢: https://www.xiabingbao.com/comments/2017/09/01/blog-comments.html 1. 实现前的思考 在经...

    高胜山 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<