作为一个学习编程的小白,这几天接触到了用户登录功能的设计与实现,为了加深记忆,我写了这篇博文,希望也能给许多学习的同学一些在思维上的帮助。

我使用的是PHP语言,工具包括有:phpStudyNotepad++谷歌的Chrome

当然学习也是需要多些看看一些优秀的文章,为了尊重作者,我也在这里附上一个比较好的用户表设计的文章。

数据库设计参考博文:浅谈数据库用户表结构设计,第三方登录

我记得以前玩网游的时候就是一个公司的游戏就需要注册一个公司的账号:梦幻西游要网易的邮箱账号,CSOL需要世纪天成的账号,CF需要QQ账号。注册账号就算了,每个公司对账号密码的格式要求还都不一样,那么对于我们玩家来说就是久不玩一个游戏就把那个账号给忘了,可以说是非常麻烦的一件事情。

随着社交软件使用的越来越频繁,门户登录的问题也开始渐渐变得越来越复杂:第三方登录,手机登录...  如果你现在新建一个网站,然后要用户输入一大堆的资料进行账号注册的话,那么用户使用量一定会是很低的,一个是不方便,时间成本高,二是应用拓展不强,应用粘稠度低。

现在的WEB建设,登录方式一般分3种:一是账号登录,二是第三方应用扫码登录,三是手机验证登录

那么在数据库中,用户登录表和详情表的设计不能再像刚开始学编程那样:

id
username
password
用户名加上密码,解决简单需求,留个id作为其他表的外键。当然,那时候密码还可能是明文存储,好点的知道md5。

WEB2.0 + 移动互联网时代,第三方登录接口开放,微信,QQ,微博,抖音,今日头条,UC等等。原来的网站要进行第三方开发的时候就需要新建一张“用户第三方登录表”

现在 网站/应用 标配都是:用户名/邮箱/手机号登录,外加一系列微博、微信等第三方登录。表结构如下:

用户表
id
username
email
phone

用户第三方登录表
id
user_id
app_type
app_user_id
access_token

用户在输入框输入用户名/邮箱/手机号和密码之后,后台判断是邮箱、手机号或是用户名,再根据条件查询是否为特定用户。

这个表结构能够承载未来一段时间的业务需求了。如果说某天冒出了一个新的登录方式,比如身份证号登录,怎么办?继续在用户表加字段?我觉得不行。

无论username+password,还是phone+password,都是一种用户信息+密码的验证形式;再来理解第三方登录,其实它也是用户信息+密码的形式,用户信息即第三方系统中的ID(第三方登录一定会给一个在他们系统中的唯一标识),密码即access_token,只不过是一种有使用时效定期修改的密码。所以我们把它抽象出了用户基础信息表加上用户授权信息表的形式。

用户基础信息表 users
id
nickname
avatar

...

用户授权信息表 user_auths
id
user_id
identity_type      登录类型(手机号 邮箱 用户名)或第三方应用名称(微信 微博等)
identifier     标识(手机号 邮箱 用户名或第三方应用的唯一标识)
credential     密码凭证(站内的保存密码,站外的不保存或保存token)

这个系统最大的特色就是,用户信息表不保存任何密码,不保存任何登录信息(如用户名、手机号、邮箱),只留有昵称、头像等基础信息。所有和授权相关(且基本前端展示无关的),都放在用户信息授权表,用户信息表和用户授权表是一对多的关系。说起来太抽象,列出来让大家理解清楚一点:

users
id nickname avatar
1 JACK_MA http://...//JACK_MA.JPG
2 小明 http://...//小明.JPG
3 小红 http://...//小红.JPG
user_auths
id user_id identify_type identifier credential
1 1 email jack_ma@example.com password_hash(密码)
2 1 phone 18988888888 password_hash(密码)
3 1 weibo 微博UID 微博access_token
4 2 username xiaoming123 password_hash(密码)
5 3 wechat 微信UserName 微信token

对于这样的设计能解决自学的同学很大一部分的思维问题,至少提升了我的逻辑思维能力。用户表的拓展还需要同学们根据自己的需求去学习更多的知识,抽象出事物本质是码农必备职业素养。原来博主的文章,关于用户登录数据库方面的设计我也就讲那么多,有兴趣的同学可以点击原文链接进行阅读,下面我们来讲讲后端对于登录的判断是怎么操作的。

如果不是很复杂的网站需求,那么对于登录的判断可以这样写代码:

<?php//接收传递的参数,并使用三元运算符判断赋值$type = isset($_GET['type']) ? $_GET['type']: '';//判断登录类型,执行相应操作switch($type){case 'qq':echo "执行QQ登录";break;case 'wechat':echo "执行微信登录";break;case 'weibo':echo "执行微博登录";break;default:echo "执行普通登录";}
?>

运行样例:

条件控制语句 switch...case 和 if...else 是可以进行互换的,这个大家按照需求来选择实现,我就不做过多讲述了。

数据库的话说说具体处理,用户发来邮箱/用户名/手机号和密码请求登录的时候,依然是先判断类型,以某用户使用了手机号登录为例,使用

SELECT * FROM user_auths WHERE type=’phone’ and identifier=’手机号’ ;

查找条目,如有,取出并判断 password_hash(密码) 是否和该条目的 credential 相符,相符则通过验证,随后通过 user_id 获取用户信息。

如果使用第三方登录,则只要判断

SELECT * FROM user_auths WHERE type=’weixin’ and identifier=’微信UserName’ ;

如果有记录,则直接登录成功,使用新的 token 更新原 token 。假设与微信服务器通信不被劫持的情况下无需判断凭证问题。


- The End -

本文转载的文章都有原来作者的链接

如果侵权请联系我删除信息

作者  |  JM.Zack

--  ପ( ˘ᵕ˘ ) ੭ 一个玩无止境的程序员  --

PHP小白编程学习——第三方登录功能设计思维相关推荐

  1. 前端学习——第三方登录(Google登录、Facebook登录)

    文章目录 前言 一.前端对接第三方登录有什么用? 二.使用环境 三.FB第三方登录 引入且封装成组件 四.G第三方登录 引入且封装成组件 五.页面上使用 总结 前言 本文介绍了作者本人学习前端Java ...

  2. 干货!自己的程序利用 编程猫 第三方登录获取用户token

    丨爬取API 关于编程猫的qq and WeChat的接口我已经为大家准备好了,拿来用就好了. QQ平台://www.codemao.cn/get-qq-code.html?appid=1012533 ...

  3. web接入微博第三方登录

    微博第三方登录 最近刚好在学习第三方登录,这里先做一下微博第三方登录的记录,因为qq第三方登录必须要完成网站备案后才能进行,后面再进行补充. 大致可以分成下面几个步骤 下面根据我自己的实现过程做一下总 ...

  4. python中小学生编程学习-推荐几个适合小白学习Python的免费网站

    9gd少儿编程网-Scratch_Python_教程_免费儿童编程学习平台 想要学好python,只靠看Python相关的书籍是远远不够的!互联网时代,我们还要充分利用网络上的免费资源,不然怎样成为一 ...

  5. Spring Security技术栈学习笔记(十三)Spring Social集成第三方登录验证开发流程介绍

    开发第三方登录,我们必须首先要了解OAuth协议(本文所讲述的OAuth协议指的是OAuth2协议),本文首先简单介绍OAuth协议,然后基于Spring Social来阐述开发第三方登录需要做哪些准 ...

  6. 零基础的小白如何学习编程,该怎么入手学习?

    零基础的小白如何学习编程,该怎么入手学习?这是一个被问烂透而有很有趣的话题了.听到这个问题时,小编的第一反应就是要弄清楚对方为什么要学习编程,这是一个很好地起点,清楚自己想要什么,才能去努力实现. & ...

  7. 如何用html语言浏览 路径,小白编程系列(二):前端学习路径

    前言 上一篇我们简单的说了一下小白应该如何认识编程这件事,怎么选择编程语言.这一篇我们来说我们选择好了编程语言后,如何学习这门编程语言,它的学习路径应该是怎么样的.这个得分开讲,每一门编程语言的学习路 ...

  8. 猫猫学习ios 之第三方登录友盟实现

    一:集成友盟分享 做第三方登录现在大多数用友盟,友盟之中做第三方登录的时候首先下载sdk,然后自己看文档,其实友盟的官方文档写的已经十分清楚了,这里自己写写,做一下笔记 二:详细 友盟:http:// ...

  9. PHP 第三方登录学习笔记

    OAuth协议 用户访问网站,请求OAuth登录页,QQ返回登陆结果,目标网站不接触到QQ账户和密码,目标网站获取授权后,在规定范围内调用API 请求OAuth登录页 Request Token UR ...

  10. 基于SSM的青少年编程学习系统设计与实现

    摘 要:在智能技术飞速发展的今天,各国都努力争取在人工智能时代的发展中占据优势,青 少年编程教育就显得格外重要.不过,相比一些青少年编程教育发展更先进的国家,我国青少 年编程教育仍处在初级阶段,很多青 ...

最新文章

  1. Python 之 杂谈(迭代器iter)、偏函数
  2. 【怎样写代码】确保对象的唯一性 -- 单例模式(三):单例模式
  3. Mybatis 使用的 9 种设计模式,真是太有用了
  4. objective-c @class 类名和#improt 类名.h的区别
  5. 网易云课堂解析_网易云课堂课程下载教程
  6. 如何网络推广教大家怎样通过提高用户粘性来助力排名提升?
  7. 未来趋势分析:Linux有可能成为java OS
  8. 如何在CentOS / RHEL上使用yum命令
  9. IOT(33)---NB-IOT通用物联解决方案
  10. 5e怎么绑定一键跳投_一键开启100台主机?我不是开玩笑,你真该了解一下这根小棒子...
  11. 人生永无止境的意思是什么_人生追求永无止境名言
  12. 没有计算机基础可以学python-没有计算机基础可以参加Python培训吗?老男孩教育...
  13. Harmony OS — Text文本框
  14. Hibernate 验证版本不兼容问题
  15. vue 中如何引入字体(思源黑体)
  16. CSS 选择所有子元素添加样式
  17. 在中文维基百科新建用户框
  18. 安装MySQL说cab文件损坏_安装Office出现的CAB文件受损解决方法
  19. 模仿某丰的 快递单号输入
  20. Win10便签在哪?Win10桌面便签怎么打开和使用?

热门文章

  1. 穷举法破解密码-方法详解
  2. NOIP2019数字游戏
  3. 将iGoogle-Style新标签页添加到Chrome
  4. win10开机就卡死在桌面上怎么解决
  5. HDDREG(硬盘坏道修复工具)v1.31绿色版
  6. python计算平均值画折线图_【中年阿姨python入门】绘制折线图
  7. 【运维心得】如何一步切换企业邮箱主域名
  8. 搜索引擎优化的九大方法
  9. iphone换android手机铃声,在iPhone中换个自定义铃声的11个步骤
  10. php判断股票涨停,常用的五种股票打板思路与常见的几种涨停板打板判断依据