在编写项目的时候,通常会遇到很多情况下,需要实现统一登录入口。统一登录入口通常指的是:能够实现手机号、邮箱、用户名等信息登录,且共用一个登录入口。

这种登录方式现在属于一种主流的登录方式,除此之外,移动端通常还有本机号码一键登录。

登录账号鉴别

鉴于各种登录账号(指的是手机号、邮箱、用户名等可以唯一鉴别用户的信息,以下统称登陆账号)的组成不一样,我们可以在后端对数据进行区分。

我们在后台对用户的数据进行记录,一般要使用一个数据表来进行存储。表结构类似这种id|name|phone|email|nick_name|desc 。那么我们在规划登录的时候,设置了手机号和邮件均可登录,且要求统一登录入口,该如何进行设计呢?

在登录的时候,我们需要根据用户的输入来判断用户登录使用的是什么登录账号。如果使用的是手机号,我们可以根据用户的输入(国内用户)判断是否为电话号码(数字/长度);如果使用的是邮箱,可以用特殊标识(@/.)来判断。但是这类的判断方法存在缺陷,如果还存在可以使用用户名进行登录的方式,需要进行各种验证,逻辑比较复杂,最终可能还需要进行登录字段的遍历操作。

如果使用初始字段进行登录设计,后续如果添加了一种登录方式,需要对数据库进行字段添加操作,修改困难,维护不便。所以,直接使用用户表进行统一登录功能的实现,并不灵活。

  1. 判断登录方式逻辑复杂
  2. 后续扩展便捷性差

数据库字段鉴别

在数据库的设计上,加记录比加字段更容易扩展。我们可以在登录的时候,创建一张专门用于维护登录的表,命名为 login_ticket 。在字段的设计上,我们可以记录:

字段名 类型 备注
id int/bigint 表格数据段唯一标识
user_id int/bigint 用户iD,关联用户表用户ID
user_name varchar(255) 用户名,用于登录时显示
login_type int 登录方式,规定每一个值代表何种登录方式
password varchar(255) 用户密码,如果第三方登录则记录 token

之后,我们就可以在 user 表中只存储和登录无关的字段信息了。例如如下设计:

字段名 类型 备注
id int/bigint 用户唯一标识
nick_name varchar(255) 用户昵称
avatar_url varchar(255) 用户头像路径
user_names varchar(255) 用户的所有登录方式

这样,我们就得到容易扩展的记录登录方式的数据表了。如果需要增加登录方式,只需要增加 login_ticket 表格中的数据即可。

例如:

  • 在 user 表中,我们存储的数据为:

    id nick_name avatar_url user_names
    1 Real /avartar/Real.jpg
  • 在 login_ticket 表中,我们存储的数据为:

    id user_id user_name(登录账户) login_type password
    10001 1 12345678910 0(邮箱) 123456
    10002 1 xxx@qq.com 1(手机号) 123456

有了这样的实际数据之后,我们如果新增登录方式,也可以通过添加字段来直接实现。但是一个 user 是存在多个字段的,那么修改密码,是需要将所有 user_id 相同的字段都修改密码的。

所以在具体的项目中,需要优先使用第二种方式来实现多种方式登录操作。如果项目数据比较大,我们还可以进行数据库的分库分表操作来完成数据库的访问优化。

【项目】多种方式统一登录入口的设计方案相关推荐

  1. spring security 安全框架改造统一登录oauth2.0方式

    继上次改造统一登录之后,这次又接到改造任务,这次的项目结构略有不同,不再有web.xml文件,也不是集成的含有拦截器的jar包,而是oauth2.0的授权码(CODE)方式的认证流程, 因为前端还是v ...

  2. 贝思外贸软件-支持多种方式登录

    一.外贸软件的登录方式支持多种 我们的登录支持所有系统登录,例如IPAD,IPHONE,移动手机,apple电脑.台式电脑.笔记本电脑等 二.外贸软件的登录类型有两种 1.网页登录:一般是在外面出差使 ...

  3. 苹果邮箱登录入口_LOL手游只有一种登录方式怎么办?只有拳头账号登录入口解决方法...

    LOL手游只有一种登录方式怎么办?众所周知,英雄联盟手游一共有3个登陆入口,分别是拳头账号.FB账号和谷歌/苹果账号,但今天有玩家发现自己的登陆界面只有一个账号登陆入口,而且还进不去,这是怎么回事呢? ...

  4. cas4.0实现多种方式邮箱/手机号码登录及认证

    先说多种方式登录的问题,这里使用手机号码和用户名 百度了半天网上能找到的办法都试了,似乎都不好使,要不就是需要修改源码 经过反复查看cas4.0源码,发现可以配置多个身份认证器,而且可以配置多个身份认 ...

  5. php通信软件培训,小蚂蚁学习APP接口开发(3)—— 统一调用入口方式封装通信接口...

    在类文件中包含了json返回数据的方法和xml返回数据的方法,在调用的时候需要调用不同的方法来实现不同类型数据的返回,今天再增加一个show()方法,作为一个统一调用的入口,只需要给它传入不同的参数就 ...

  6. Spring Boot项目打war包(idea:多种方式)

    Spring Boot项目打war包(idea:多种方式) 前言:在idea中,经常会对web项目进行打jar包或者war包.jar包在Java环境中运行,war包在Tomcat服务器中跑.对于打wa ...

  7. 【项目篇】Android团队项目开发之统一代码规范

    前言 团队项目开发前的统一三要素:统一需求/开发文档,统一代码规范,统一环境(编译/测试/发布). 一个项目团队,要想有高效的产出,必须在团队协作上下好功夫,必须在项目开发统一进度上做好协调.只有在高 ...

  8. 【探花交友DAY 02】项目搭建和用户登录功能的实现

    1. 项目介绍 探花交友是一个陌生人的在线交友平台,在该平台中可以搜索附近的人,查看好友动态,平台还会通过大数据计算进行智能推荐,通过智能推荐可以找到更加匹配的好友,这样才能增进用户对产品的喜爱度.探 ...

  9. php 新浪通行证、新浪微博模拟统一登录 (后台网页抓取版) 2016

    前几天做了一个Java的新浪通行证模拟登录测试.现在给大家一个php的新浪通行证.微博登录的示例,下面是在phpcms中实现的,访问链接的方式与单独php项目有些差异,php单独项目时,对应访问的链接 ...

最新文章

  1. Scikit-learn 发布 0.20版本!新增处理缺失值、合并Pandas等亮点功能
  2. Chart.js-线形图分析(参数分析+例图)
  3. 手把手教你用Keras进行多标签分类(附代码)_数据派THU-CSDN博客 (翻译:程思衍校对:付宇帅)
  4. mobaxterm设置中文界面显示_Adobe系列2020如何更改界面显示语言
  5. Java IO - 字符流
  6. Gui+jdbc+mysql实现图书管理
  7. 【笔试/面试】排列组合与概率计算(三)
  8. python为什么叫爬虫-可以写爬虫的那么多,为什么只有python火了?
  9. nfc pm3 模拟加密门禁卡_关于如何用PM3将有密门禁卡写入支持NFC的手机
  10. 多种方法破解Windows 系统密码
  11. 基于simulink的风能/光伏发电系统仿真
  12. 我的漫漫程序人生路(真诚的长文,慎点)
  13. 神经网络长什么样不知道?这有一份简单的 pytorch可视化技巧
  14. poj 1324 Astar
  15. 推荐--jQuery使用手册 1
  16. window 10 安装node.js时遇到2502 2503错误解决方法
  17. OpenCV深入学习(5)--直方图之calcHist使用
  18. 华兴数控g71外圆循环编程_华兴数控G71指令怎么编
  19. Oracle基本操作查询总结(其一)
  20. winform实现发票打印功能

热门文章

  1. Troubleshooting Office Web Apps with SharePoint 2013
  2. portraiture中文版下载切换教程v3.5.6版本
  3. [CF1336F]Journey
  4. 知乎上这个程序员火了。。。
  5. python 3.8教程_Python 3.8 新功能全解
  6. 雷军十年的演讲:吾志所向,一往无前!
  7. 基于Matlab的磁力计校准(附源码)
  8. python自动给数字前面补0的方法
  9. 浅析深度学习中优化方法
  10. OSChina 周日乱弹 —— 请务必让我分担他们的痛苦!