多种方式登陆模块设计

2023-05-16

多种方式登陆模块设计


目录

  • 多种方式登陆模块设计
    • 目录
    • 参考了一些资料
    • 总结一下
      • 1 使用 用户名邮箱手机号 密码 登陆
      • 2 第三方登陆
        • mob文档中还有以下描述
    • 思考


参考了一些资料

  • 知乎 第三方一键登录如何保证产品的唯一ID?
  • 开源中国社区 使用第三方登录,怎么设计自己的用户表
  • segmentfault 带第三方登录的用户表如何设计
  • 德问 当一个系统可以同时使用用户名/邮箱/手机号注册时,数据库应如何设计
  • mob文档(是一个专门做第三方登陆的网站)

总结一下

可以分为两种登录方式:

  • 第一种:使用 用户名/邮箱/手机号 + 密码 登陆。
  • 第二种:第三方登陆 。

1# 使用 用户名/邮箱/手机号 + 密码 登陆。

设计数据表users的列为(uid, username, email, phone, passwd) 其中username、email、 phone都应该是unique。

登录时 select 1 from users where username = '' or email = '' or phone = '' and passwd = '';

  • 这样做的缺点是,A的用户名可以设置成是B的电话号码或者邮箱。
  • 可以使用正则表达式来区分出邮箱和电话号码。如果是这两种格式则不允许注册为用户名?
  • 也可以用正则表达式来区分出是邮箱还是电话号码,然后再查数据库。

2# 第三方登陆。

请求第三方登陆通常会返回一个openid。

设计数据表third为(uid, openid, accessToken, type) ,分别对应users表的uid, 第三方登陆的openid,第三方登陆的accessToken, 第三方登陆的类型(如微博=1、qq=2)。

登陆的流程可以参照前文segmentfault的流程图。

大概就是:

  • 如果在数据表中没查到这个第三方登陆的openid,那就往数据表里填入,代表新用户注册,然后可以引导用户填写 用户名/邮箱/手机号 + 密码 将两种登陆关联起来。当然也可以跳过引导步骤。那么可以uid填一个随机字符串之类的。
  • 如果在数据库中查到了第三方登陆的openid,代表用户已注册,那就直接登录成功。

mob文档中还有以下描述

选择好平台以后,现在思考下面的问题:

你的应用是否具备独立账户系统?
这个问题是第三方登录时接口选择的重要标准。如果你选择“是”,则意味着你的应用只是需要第三方平台的用户,而不是他们的账户验证功能——也就是“要数据,不要功能”。而如果你选择“否”,则表示你实际上是’“要功能,不要数据(用户)”’。对于ShareSDK来说,前者你的入口方法是showUser(null),而后者是authorize()。那么下面我分情况解释两种接入方式的步骤。

要数据,不要功能

如果你的应用拥有用户系统,就是说你的应用自己就有注册和登录功能,使用第三方登录只是为了拥有更多用户,那么你可以依照下面的步骤来做:

1、用户触发第三方登录事件
2、showUser(null)请求授权用户的资料(这个过程中可能涉及授权操作)
3、如果onComplete()方法被回调,将其参数Hashmap代入你应用的Login流程
4、否则提示错误,调用removeAccount()方法,删除可能的授权缓存数据
5、Login时客户端发送用户资料中的用户ID给服务端
6、服务端判定用户是已注册用户,则引导用户进入系统,否则返回特定错误码
7、客户端收到“未注册用户”错误码以后,代入用户资料到你应用的Register流程
8、Register时在用户资料中挑选你应用的注册所需字段,并提交服务端注册
9、服务端完成用户注册,成功则反馈客户端引导用户进入系统
10、否则提示错误,调用removeAccount()方法,删除可能的授权缓存数据
要功能,不要数据

如果你的应用不具备用户系统,而且也不打算维护这个系统,那么你可以依照下面的步骤来做:

1、用户触发第三方登录事件
2、调用platform.getDb().getUserId()请求用户在此平台上的ID
3、如果用户ID存在,则认为用户是合法用户,允许进入系统;否则调用authorize()
4、authorize()方法将引导用户在授权页面输入帐号密码,然后目标平台将验证此用户
5、如果onComplete()方法被回调,表示授权成功,引导用户进入系统
6、否则提示错误,调用removeAccount()方法,删除可能的授权缓存数据


思考

上述想法都只是查资料和一些构思,并没有实际做出来项目,以后有机会应该真正实现这个登陆系统。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多种方式登陆模块设计 的相关文章

随机推荐

  • QT 打印目录树

    include 34 dialog h 34 include lt QDebug gt include lt QDir gt include lt iostream gt using namespace std dir是目录 xff0c 不
  • [cmake 3.5]使用自身集成的FindProtobuf来生成并构建proto代码

    使用FindProtobuf xff0c 可以不用手动执行protoc命令 xff0c nmake的时候自动去执行protoc xff0c 然后再编译链接生成静态库 如果proto文件之间有相互引用 xff08 使用了import xff0
  • VNC中Vncconfig配置

    Vncconfig 这个工程里面主要实现的是服务器端的系统配置 xff0c 具体过程如下 xff1a 建立控制台 初始化系统日志表 创建编辑注册表的对象 异常处理程序访问注册表权限 创建读取注册表的键类 建立登陆对话框 xff0c 初始化方
  • Linux下源码安装xrdp并禁止粘贴板交互(附更换yum阿里源)

    vncserver 启动vncserver服务 xrdp配置 1 下载xrdp源码 www xrdp org 2 禁用复制粘贴 xff0c 然后默认这个是可以的 直接把 sesman chansrv clipboard h 里定义的函数 x
  • Windows下Fortran语言的编译环境之CodeBlocks配置

    Fortran编译环境配置 xff08 Windows xff09 CodeBlocks的下载与安装 安装包的下载最新版本的 CodeBlocks 的下载旧版本的 CodeBlocks 的下载 CodeBlocks的安装CodeBlocks
  • QueryWrapper、UpdateWrapper和LambdaWrapper的使用

    mybatis plus条件构造器关系图 介绍 xff1a 1 上图绿色框为抽象类abstract 2 蓝色框为正常class类 xff0c 可new对象 3 黄色箭头指向为父子类关系 xff0c 箭头指向为父类 废话不多说 直接上示例 注
  • Angular-使用ng update命令升级到Angular7.1.4

    Angular 使用ng update命令升级到Angular7 1 4 Angular CLI 是 Angular 的一个命令行工具 xff0c 可以便捷的执行创建项目 创建文件 测试 打包和发布等任务 关于 Angular 版本 Ang
  • 程序设计作业week04

    A DDL 的恐惧 题目 ZJM 有 n 个作业 xff0c 每个作业都有自己的 DDL xff0c 如果 ZJM 没有在 DDL 前做完这个作业 xff0c 那么老师会扣掉这个作业的全部平时分 所以 ZJM 想知道如何安排做作业的顺序 x
  • STM32平台下官方DMP库6.12超详细移植教程

    前记 Motion Driver官方库 xff1a Motion Driver 6 12 STM32工程源码 xff1a STM32F103C8 软件MPU6050 xff08 DMP xff09 MPU6050软件I2C驱动 xff0c
  • 嵌入式Linux系统开发笔记(十四)

    U Boot环境变量 uboot 中有两个非常重要的环境变量 bootcmd 和 bootargs xff0c bootcmd 和 bootagrs 是采用类似 shell 脚本语言编写的 xff0c 里面有很多的变量引用 xff0c 这些
  • 嵌入式Linux系统开发笔记(十五)

    Linux内核启动验证 5 1 编译内核 span class token comment 清除工程 span span class token comment make distclean span span class token co
  • 嵌入式Linux系统开发笔记(十六)

    根文件系统rootfs启动验证测试 接下来我们使用测试一下前面创建好的根文件系统 rootfs xff0c 测试方法使用 NFS 挂载 6 1 检查是否在Ubuntu主机中安装和开启了NFS服务 xff08 特别注意 xff1a nfs 配
  • 安卓5.0以上7.0以下使用Termux

    参考 xff1a https zhuanlan zhihu com p 400507701 说明 xff1a Termux支持5 0以上的安卓系统 Termux7 3版本之后 xff0c 仅支持7 0以上的安卓系统 1 安装Termux 设
  • 关于DSP的CCS6.0平台下的工程搭建(完全可移植)

    本工程以CCS6 0下新建TMS320F28335工程为例 xff0c 其他系列处理器工程搭建类似 xff0c 参考本例即可 工程搭建用到的F2833x TI官方库文件 下载链接 也可直接参考笔者搭建好CCS6 0的工程 下载链接 所建工程
  • STM32Fxx JTAG/SWD复用功能重映射

    问题描述 xff1a 在实验室调车过程中 xff0c 遇到的一个问题 xff1a 为了每次下载程序方便 xff0c 队员们往往会把 Jlink 插在板子上 xff0c 可是在调车过程中发现 xff0c 有时程序会莫名死掉 xff0c 而同样
  • VS2012编译RTKLIB——GNSS定位开源库

    RTKLIB 开源库 有着强大的 GPS 数据实时和后处理功能 xff0c 由于 笔者的毕业设计中需要对GPS 载波相位观测量进行 RTK 解算 xff0c 故而 xff0c 对 RTKLIB 开源库进行了学习与研究 RTKLIB 提供了很
  • 51单片机串行口波特率计算

    1 工作方式介绍 xff1a 方式 0 xff1a 这种工作方式比较特殊 xff0c 与常见的微型计算机的串行口不同 xff0c 它又叫 同步移位寄存器输出方式 在这种方式下 xff0c 数据从 RXD 端串行输出或输入 xff0c 同步信
  • 解决HTTPS证书安全检测时提示 PCI DSS 不合规问题

    解决HTTPS证书安全检测时提示 PCI DSS 不合规问题 今天在进行HTTPS证书安全检测时 xff0c 提示PCI DSS不合规 经查询得知是因为SSL配置时启用了TLS1 0导致的 关于 PCI DSS 自2018年6月30日起 x
  • 数码管显示问题总结

    1 数码管显示原理 我们最常用的是七段式和八段式 LED 数码管 xff0c 八段比七段多了一个小数点 xff0c 其他的基本相同 所谓的八段就是指数码管里有八个小 LED 发光二极管 xff0c 通过控制不同的 LED 的亮灭来显示出不同
  • 多种方式登陆模块设计

    多种方式登陆模块设计 目录 多种方式登陆模块设计 目录参考了一些资料总结一下 1 使用 用户名邮箱手机号 密码 登陆2 第三方登陆 mob文档中还有以下描述 思考 参考了一些资料 知乎 第三方一键登录如何保证产品的唯一ID xff1f 开源