数据库表设计3:微信、QQ第三方多账号登陆

前言:相比于本地注册,第三方登录一般来说比较方便快捷。因为显著降低了用户的注册或登录成本,从而减少由于本地注册的繁琐性而带来的隐形用户流失,最终提高注册转化率。现在几乎大部分的 App 都支持使用多个第三方账号进行登录,如:微信、QQ、微博等,我们把此称为多账号统一登陆。而这些账号的表设计,流程设计至关重要,不然后续扩展性贼差。

一、常见的四种注册登录方式

①用户名+密码

这种方式在很多初期网站建设会使用,先注册,再进行登录,在老一点的cms系统中都能找到这个影子。

②手机号+短信验证码

 ③引入第三方账户登录方案

常见的第三方社交登录:微信、微博、QQ等

④本机号码一键登陆

获取到当前手机使用的手机卡号,直接使用这个号码进行登录,这就是一键登录。

一键登录能不能做,取决于运营商是否开放相关服务,这也是为什么过去没有一键登录,直到最近三大运营商都有了自己的开放平台:


二、 什么是第三方登录

所谓的第三方登录,是说基于用户在第三方平台上已有的账号和密码来快速完成己方应用的登录或者注册的功能。而这里的第三方平台,一般是已经拥有大量用户的平台,国外的比如Facebook,Twitter等,国内的比如微博、微信、QQ等。

使用第三方登录后,要求用户补充一些信息(手机号、邮箱等等),如果用户信息已存在,则直接绑定;(在用户经过新浪微博或QQ授权登陆后,你的系统自动弹出要求该用户补充少量信息的对话框)

如果为了用户体验更好,可以将第三方登录和账号绑定进行解耦:在应用运行过程中的一些关键点上卡住,以网络安全的名义,在那里让用户补充手机等信息(嘿嘿)。 

这里以QQ-SDK的登录逻辑, 我们先来一波时序图。


三、第三方多账号登录表

用户表设计:

iduser_nameuser_passworduser_mobilestatemore
用户id用户名用户密码手机号码账号状态其他信息

3.1、以微博登录举例

进入 Web2.0 时代 ,微博开放了第三方网站登录, 产品经理说这个我们得要, 加个用微博帐号就能登录我们的 App吧,而且得和我们自己的用户表关联。

流程:

  1. 客户端调用微博登录的界面,进行输入用户名、密码,登录成功后,会返回 access_token,通过 access_token调取 API接口获取用户信息。

  2. 服务端通过用户信息在我们用户表创建一个账号,以后,该第三方账号即可通过该微博账号直接进行登陆。

微博用户信息表设计:

iduser_iduidaccess_token
主键id用户id微博唯一id授权码

噩梦来临

紧接着, QQ又开放用户登录了, 微信开放用户登录了,Github开放用户登录了。。。。。。一下子要接入好多家第三方登录了, 只能按照 “微博用户信息表” 新建一个表,重写一套各个第三方登录。

3.2、第三方登录表统一设计

用户基础信息表:

iduser_nameuser_passworduser_mobilestatemore
用户id用户名用户密码手机号码账号状态其他信息

用户授权信息表:

iduser_idlogin_typeopenidaccess_token
主键id用户id

第三方登录类型(微信/QQ/微博等)

第三方应用的唯一标识 第三方的保存 token

说明:

  1. 用户表分为 用户基础信息表 + 用户授权信息表

  2. 所有和授权相关,都放在用户信息授权表, 用户信息表和用户授权表是一对多的关系 。


参考链接:

多账号统一登陆,账号模块的系统设计

面试官问:如何设计 QQ、微信等第三方多账号登陆 ?还要我说出数据库表设计!

一键登录了解一下?

  • 3
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
后台地址:你的域名/admin 后台号码:admin 后台密码:123456 www/pc/pcauthurl.php文件 里面替换成你的域名 即可 数据库连接/www/core/config.php 安卓包反编译搜索codepay.lishi001.cn替换成自己域名即可 源码介绍: 竣成码支付微支付 对接简单,直接使用易支付接口即可 微信支付宝QQ支付接口 竣成码支付-微支付,独立开发者个人即时到账收款平台,无需担心第三方跑路资金直接到账,不经过第三方。快速回笼资金,超越竞争对手! 简单几步,即可开始收款,竣成码支付-微支付的原理是监控微信、支付宝、QQ钱包的二维码扫码支付到账通知,并回调开发者应用通知开发者应用订单支付结果。 产品优势: 1.一分钟快速集成——接口我们完成了99% 支持全部网站多种语言快速集成; 2.小站长福音——免手续费,适合小型站长,免手续费自己的收款码收款; 3.资金及时到账——资金直接到账,不经过第三方,快速回笼资金,超越竞争对手; 4.多种支付方式——支持微信支付,支付宝支付,QQ钱包支付,财付通支付,同时支持电脑手机; 5.多用户无限制——不绑定任何账号,域名,CPU,完全自由使用,随意更换; 6.灵活的接口机制——通过接口以及自定义的搭配,轻松按照需求打造支付各种功能 【二开修复更新如下】 1:修复和更换无法上传收款码的api接口 2:修复和更换微信支付宝解码地址的api接口 3:去除已知的一个后门文件 4:修复在线客服链接源码 5:增加Q群商户链接源码 6:增加公益邮件发送配置数据,意思就是说可以用我配置好的发送注册验证码接口的邮箱数据。
接入第三方登录是让用户方便快捷地使用已有账号登录你的网站或应用程序,提高用户体验的一种方式。本文将介绍如何使用 PHP 实现微信公众号第三方登录。 1. 获取微信授权 首先,需要获取微信用户的授权。具体步骤如下: 1)引导用户打开微信授权页面: ```php $appid = 'your_appid'; $redirect_uri = urlencode('http://yourdomain.com/callback.php'); $scope = 'snsapi_userinfo'; $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=$scope&state=STATE#wechat_redirect"; header("Location: $url"); ``` 其中,`$appid` 是你的微信公众号的 AppID,`$redirect_uri` 是授权后回调的 URL,`$scope` 是授权作用域,可以是 `snsapi_base` 或 `snsapi_userinfo`,`$state` 是自定义参数,用于防止 CSRF 攻击。 2)获取授权码: 用户同意授权后,会重定向到 `$redirect_uri` 指定的 URL,带上授权码 `code` 和 `state` 参数。 ```php $code = $_GET['code']; $state = $_GET['state']; ``` 3)获取 access_token 和 openid: 使用授权码 `code` 获取 `access_token` 和 `openid`。 ```php $access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code"; $response = file_get_contents($access_token_url); $result = json_decode($response, true); $access_token = $result['access_token']; $openid = $result['openid']; ``` 其中,`$secret` 是你的微信公众号的 AppSecret。 2. 获取用户信息 获取到 `access_token` 和 `openid` 后,可以使用以下代码获取用户信息: ```php $userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN"; $response = file_get_contents($userinfo_url); $userinfo = json_decode($response, true); ``` 其中,`$userinfo` 包含用户的昵称、头像等信息。 3. 将用户信息保存到数据库 最后,将获取到的用户信息保存到数据库中,以便下次使用时快速登录。 ```php // 连接数据库 $con = mysqli_connect('localhost', 'username', 'password', 'database'); mysqli_set_charset($con, "utf8"); // 查询用户是否已存在 $sql = "SELECT * FROM users WHERE openid='$openid'"; $result = mysqli_query($con, $sql); if (mysqli_num_rows($result) == 0) { // 用户不存在,插入新用户信息 $nickname = mysqli_real_escape_string($con, $userinfo['nickname']); $headimgurl = mysqli_real_escape_string($con, $userinfo['headimgurl']); $sql = "INSERT INTO users (openid, nickname, headimgurl) VALUES ('$openid', '$nickname', '$headimgurl')"; mysqli_query($con, $sql); } // 保存用户登录状态 $_SESSION['openid'] = $openid; ``` 以上就是使用 PHP 实现微信公众号第三方登录的步骤。需要注意的是,为了确保安全性,应该对用户输入的数据进行过滤和验证,防止 SQL 注入和 XSS 攻击等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java架构何哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值