前言
大卫科技 Blog原创作品,版权属于:大卫科技 Blog(转载请著名出处)!
原文链接https://www.iyuu.cn/archives/88/
如需转载,可下载Markdown原文:点此下载md.txt
本插件已部署,欢迎体验:
一、功能介绍
特色亮点功能:同一用户,可以绑定15种不同的登录方式!
在原项目TeConnect的基础上,进行完全的二次开发、优化及修复。重点有:
- 重新设计数据表结构,删除原connect表,后续具有完美的扩展性及兼容性;
- 已开发支持15种第三方登录,后续可以支持更多……;
- 优化会员绑定逻辑,修复原项目登录状态下绑定错乱、重复绑定等Bug;
- 增加会员uuid机制,自动关联users数据表的uid字段,支持更多功能开发的可能;
- 优化解绑逻辑,和第三方资料更新逻辑等。
项目仓库
码云:https://gitee.com/ledc/TeConnect
github:https://github.com/ledccn/TeConnect
二、插件下载
三、安装步骤
即可查看!
- 解压插件到
Plugins
目录; - 在后台启用插件,并配置插件参数(方法见:参数配置 - 配置示例);
在当前使用主题的适当位置添加
TeConnect_Plugin::show()
方法,代码:handsome Theme
示例图:
下载你喜欢的png登录图标,放到/usr/plugins/TeConnect/login_ico/{type}.png
,然后修改登录按钮样式在Plugin.php 第125行
,代码:<a href="{url}"><img src="/usr/plugins/TeConnect/login_ico/{type}.png" alt="{type}-{title}" style="margin-top: 0.8em;"></a>
- 在第三方平台设置网站回调域,
注意区分http、https
及地址重写隐藏index.php
(方法见:参数配置 - 配置示例)。 如果您的主题开启了全站PJAX,需要把以下代码放入PJAX回调函数内:
四、参数配置
配置示例
1:后台互联配置
具体格式为:type:appid,appkey,title
,注释:
- type:第三方登录帐号类型
- appid:第三方开放平台申请的应用id
- appkey:第三方开放平台申请的应用key
- title:登录按钮的标题
在后台互联配置中,直接以文本形式填写,一行为一个帐号系统的参数;
为减少错误发生,您可以复制对应的配置示例
,把APP_KEY
和APP_SECRET
改成您自己的参数就可以了!
例如:qq:APP_KEY,APP_SECRET,腾讯QQ
改成:qq:101015836,547s87f8s7df7sd877ji75s78sdfd,腾讯QQ
粘贴到后台互联配置
,即完成了腾讯QQ登录的配置,其他类型同理!
2:网站回调域配置
即可查看
五、第三方账号绑定流程
1、方案选择
我参考了国内主流的几家互联网公司的第三方账号登录功能,发现主要分成两种设计方案;
一种是账号强绑,像京东、小米等,在第三方账号授权通过后,需要用户绑定自己的账号;
一种是今日头条、知乎,在第三方账号授权通过后,随机给用户生成一个账号或者调用第三方账号昵称,无需绑定账号,即可成功登录。
目前,两种方案都支持
,您可以在后台开启或关闭强制绑定
!
2、绑定流程一(未登录状态)
用户在登录界面点击第三方账号,授权通过后,我们获得用户第三方账号的OpenID,由此判断用户的第三方账号之前是否绑定过,如果绑定过则直接登录成功。
如果没有绑定过,则跳到账号绑定页面。账号绑定页面需要分成已有账号直接绑定,和没有账号,新注册账号进行绑定两种情况。
当用户已有账号时,通过输入账号密码校验身份,校验通过后即可绑定成功/登录成功。
当用户没有账号时,用户可通过注册新账号,注册成功后即可绑定成功/登录成功。
3、绑定流程二(登录状态)
在个人账号中心里提供绑定管理的功能和界面,在用户已经登录的情况下,可以直接绑定第三方账号,只要获得授权通过,即可绑定成功。
六、第三方帐号解绑流程
在个人账号中心>绑定管理中,可以对已经绑定的第三方账号进行解绑操作。在这里需要注意,由于用户长期使用第三方账号登录,实际上是由第三方账号承担了提交账号和保护账号安全的工作,因此在解绑第三方账号时,我们需要提醒用户,解绑以后只能通过本平台账号密码方式来登录。最好是提示用户记住当前账号
京东的解绑账号功能
另一方面,由于之前是由第三方账号“帮平台”做了账号安全的工作,因此在解绑账号的时候,我们需要考虑如何保护账号安全。因此可以在解绑的时候,对账号做一定的安全校验或安全保护。
我们最终定的方案是 当用户在解绑时,需要校验手机短信验证码,如果没有绑定手机,则提示用户先去绑定手机。
解绑流程
第三方账号虽然是一个小功能,但是在设计过程中,我们要结合自身产品的特点来确定产品方案和产品流程。授权之后,是直接登录成功,还是绑定自己平台的账号,这是由自己产品特点决定。同时,对新增账号来说,如何设计用户账号的安全,也需要根据产品特点和安全策略来设计适合的产品流程。
七、数据表结构(不开发,可以不看)
typecho_oauth_user数据库表结构:
字段 | 类型 | 注释 |
---|---|---|
uid | int(10) unsigned NOT NULL COMMENT | 用户ID |
access_token | varchar(255) NOT NULL COMMENT | 用户对应access_token |
datetime | timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT | 最后登录 |
expires_in | int(10) unsigned NOT NULL DEFAULT '0' COMMENT | access_token过期时间戳 |
gender | tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT | 性别0未知,1男,2女 |
head_img | varchar(255) NOT NULL COMMENT | 头像 |
name | varchar(38) NOT NULL COMMENT | 名字 |
nickname | varchar(38) NOT NULL COMMENT | 第三方昵称 |
openid | char(50) NOT NULL COMMENT | 第三方平台的用户唯一标识 |
refresh_token | varchar(255) NOT NULL COMMENT | 刷新有效期token |
type | char(32) NOT NULL COMMENT | 第三方平台的类型 |
uuid | int(10) unsigned NOT NULL COMMENT | 对应users表uid |
【推荐:后台关闭强制绑定】
- 管理员已登录状态时,直接互联登录,可以绑定管理员身份!(
源码第128行
此时users
表不变,oauth_user
表创建绑定关系,uid、uuid等于管理员uid); - 管理员未登录时,直接互联登录(
源码第153行
此时users
表创建新用户、oauth_user
表绑定关系:uid、uuid等于新用户uid); - 在第2步完成后,退出互联登录;重新用管理员登录成功后不退出,再次互联登录(
源码第256行
此时users
表不变,oauth_user
表更新绑定关系:uuid不变、uid等于管理员uid); - 同一用户,可以绑定15种不同的登录方式!但是,同类型的第三方账号仅可绑定一个!通俗点:用户不能绑定2个QQ号码来进行登录。(源码
250
行、267行
) oauth_user
表完整保存用户的关键授权参数access_token、expires_in、datetime,可以在用户离线的情况下调用API;- uuid完整记录着原始绑定关系,支持解绑后数据不丢失。
关键代码
本插件已部署,欢迎体验:
版权属于:大卫科技Blog
本文链接:https://www.iyuu.cn/archives/88/
转载时须注明出处
启动插件时跳转500
现在还能用吗?你站的QQ登录出现警告页面了,没更新了吗?
每一个网站申请一个API?
不小心点了禁用插件,再次开启;再次qq登录,用户还是需要重新绑定
500错误把表里值允许为NULL就好了,或者加个默认值,再或者去改mysql配置文件
最新的github上已修复。
Plugin.php on line 60
之前一直用着好好的,今天提示需要配置回调地址。以为腾讯互联出了问题,上去看了也没有变化,应该如何解决
学习一下
老大,为啥QQ登录后不像本站一样能获取QQ昵称呢,全是空白资料,如果开启登录完善资料,填写后点击确定不跳转
登录成功后如何隐藏按钮?
路过,大佬66666
学习一下,冒个泡
大佬牛逼
还不错
500错误解决方案:修改typecho_oauth_user表,加上默认值即可
最新的github上已修复。
致命错误是这个:SQLSTATE[HY000]: General error: 1364 Field 'access_token' doesn't have a default value
QQ登录报错:Notice: Undefined variable: oauth_user in D:\htdocs\usr\plugins\TeConnect\Widget.php on line 135
Server Error
最新的github上已修复。
看看,说不定能用到。
看起来很不错的插件~
不错!顶~
前来体验
大佬审核一下呀~ 想用这个插件~
我安装了回调地址打开显示错误Argument 1 passed to themeInit() must be an instance of Widget_Archive, instance of TeConnect_Widget given, called in /www/wwwroot/usr/plugins/TeConnect/Widget.php on line 24
安装步骤第一步,仔细看看。
这么好的东西一定要顶一下!
|´・ω・)ノ
谢谢分享
体验下
学习一下~
|´・ω・)ノ
能和LoveKKVIP 共同使用吗?
有没有卸载方法,
大佬,微信公众号授权登录可以安排上吗
试试看 貌似没头像
测试
୧(๑•̀⌄•́๑)૭
学习一下
登陆跳转显示500,Server Error
看了一下日志:
[Fri Nov 15 15:32:56.257195 2019] [proxy_fcgi:error] [pid 1379:tid 139921167705856] [client 00000000:8811] AH01071: Got error 'PHP message: PHP Notice: Undefined variable: oauth_user in /data/wwwroot/rplib.cn/usr/plugins/TeConnect/Widget.php on line 135', referer: https://rplib.cn/admin/login.php
最新的github上已修复。
我也来学习学习下OωO
体验完毕,滴!访客卡!请上车的乘客系好安全带,现在是:Tue Nov 12 2019 13:29:27 GMT+0800 (中国标准时间)
滴!访客卡!请上车的乘客系好安全带,现在是:Tue Nov 12 2019 13:29:27 GMT+0800 (中国标准时间)
我登录出现了错误数据,链接https://blog.xiaohongyan.cn
帮我看看
解决了,但是用qq登录后跳转,没显示已经登录。还是处于游客状态
看了半天才发现要评论才有步骤
大佬开发版的typecho绑定账号和注册都是直接跳首页变成未登录了
博主,我这边发现一个问题,就是qq注册的用户,后台删除了,就再也不能qq登录注册了,怎么修复?
有2个表。另一个表,也删除。
小白表示完全看不懂
膜拜一下准备上车
小白表示完全看不懂
感谢分享。有一说一,QQ 提供的这几个样式都好丑
确实如是。
不行,严格按照上面的步骤去配置插件了,但是最后使用QQ登录的时候显示这个错误Database Query Error
请安装最新版本的,再试一下。
仔细检查配置是否出错。
微博登录同样出现Database Query Error,插件也按照你说的设置了
最新的github上已修复。
我的天,好棒呀
ヾ(≧∇≦*)ゝ
666
福娃福娃二分
感觉图标有点大。
需要多大的图标,可以去QQ官方下载源文件修改。
(●—●)拿走了
厉害了
不行哦,Database Query Error
nginx 500
不错,增加微信登陆就完美了
学习 想看隐藏文件
学习 想看隐藏文件
haha
顶一下
666
很强
我在QQ互联看到的是 APP ID:和APP Key:,APP_KEY,APP_SECRET在哪看啊 ,好像格式还不一样OωO
APP ID:和APP Key,是一样的意思。
test
|´・ω・)ノ先看一下隐藏内容
[...]https://www.iyuu.cn/archives/88/[...]
需要完善一下,就是登录后在哪个页面登录的就回到哪个页面,这样就更好了,比如登录后台,第三方登录后直接跳去首页,又要重新进后台,这样比较麻烦的
2020年8月3日19:10:00 功能已做好,推送至github。更新体验下吧!
这个功能可以有,抽空做一下。人性化很多。
666牛B哦!
我来了
看看
这个“适当位置”就很魔性了,整了半天愣是没整明白
每个模板登录按钮所在位置不一样。具体分析。
牛批
评论一下看下,评论一下看下
(๑•̀ㅁ•́ฅ)
留个记号
冒个泡
学习学习!
此贴留名记录。2019年8月11日
之前用TeConnect的怎么做数据迁移
我做个升级脚本,做好了放到本页面。
做了吗(´இ皿இ`)