- 广场
-
- 搜索中...
- 本文档内搜索
zxf/tools 使用手册
OAuth 第三方登录
统一实现了多种第三方登录,并整合成相同的OAuth公开接口方便统一调用
目前仅实现了部分SDK,有些SDK还没验证结束
支持的登录
类名 | 介绍 | 状态 |
---|---|---|
QQ登录 | 已验证 | |
Sina | 微博登录 | 已验证 |
微信公众平台登录 | 未验证 | |
Aliyun | 阿里云 | 未验证 |
Alipay | 支付宝 | 未验证 |
Github | Github | 未验证 |
Gitee | 码云 | 未验证 |
谷歌 | 未验证 | |
脸书 | 未验证 | |
Naver | Naver | 未验证 |
未验证 | ||
Line | Line | 未验证 |
Douyin | 抖音 Douyin 、 头条 toutiao 、西瓜 xigua | 未验证 |
Baidu | 百度 | 未验证 |
QQ 登录
需要开通 unionid
接口
接口名称 | 接口介绍 | API | 状态 | |
---|---|---|---|---|
登录 | 使用QQ登录应用 | get_user_info | 已获取 | |
unionid | 平台统一ID信息 | getUnionId | 已获取 |
公开接口
引入命名空间
use zxf\Login\OAuth;
1、 初始化实例类
// 实例化方式一:
$oauth = OAuth::Sina(?array $config=[]);
$oauth = OAuth::Qq(?array $config=[]);
// 实例化方式二:
$name = 'qq';
/** @var $oauth \zxf\Login\Contracts\Gateway */
$oauth = OAuth::$name(?array $config=[]);
// 实例化方式三:
$oauth = new \zxf\Login\Gateways\Qq(?array $config=[]);
2、 可选:需要强制验证回跳地址中的state参数
提示:为了不暴露参数信息,内部会自动生成和处理state参数
可以传入一个参数,例如字符串或者数组,在回调中进行自定义业务逻辑处理
// $data 为空时内部会默认生成一个值
// 传入$data数据后可以在回调中获取到
$oauth->mustCheckState(string|array $data=''); // 如需手动验证state,请关闭此行
// 微博、微信:特别指定用于手机端登录【正常情况下不设置】,则需要设定->setDisplay('mobile')
3、 得到授权跳转地址
$url = $oauth->getRedirectUrl();
4、重定向到外部第三方授权地址
// 各个框架差异,请自行参考框架文档
// Laravel
return redirect()->away($url);
// ThinkPHP
$this->redirect($url);
5、可选:回调时验证 state
并返回之前传入的参数$data
$data = $oauth->mustCheckState()->checkState(); // 如需手动验证state,请关闭此行
6、获取第三方用户信息
$userInfo = $oauth->userInfo(); // 【推荐】处理后的用户信息
// OR
$userInfo = $oauth->getUserInfo(); // 第三方返回的原始用户信息
OAuth 公共方法
// 得到跳转地址
public function getRedirectUrl();
// 获取当前授权用户的openid标识
public function openid();
// 【推荐】获取格式化后的用户信息
public function userInfo();
// 获取原始接口返回的用户信息
public function getUserInfo();
示例
<?php
namespace xxx;
use Exception;
use zxf\Login\Constants\ConstCode;
use zxf\Login\OAuth;
/**
* QQ 互联登录
*/
class Connect
{
/**
* qq登录
*
* 可以在url 中传入 参数 callback_url 用来做通知回调 ; 例如
* xxx.com/callback/tencent/login?callback_url=http%3A%2F%2Fwww.a.com%2Fa%2Fb%2Fc%3Fd%3D123 callback_url 参数说明
* 传入前需要做 urlencode($callback_url) 操作 callback_url 回调地址要求允许跨域或者 csrf
*/
public function login()
{
try {
// 1、 初始化实例类
// 实例化方式一:
$oauth = OAuth::Qq();
// OR 实例化方式二:
// $oauth = new Qq($config);
$jump_url = request()->get('callback_url', '');
$jumpUrl = $jump_url ? urldecode($jump_url) : '';
// 2、 可选:强制验证回跳地址中的state参数
// 参数为空时内部会默认一个值
$oauth->mustCheckState($jumpUrl); // 如需手动验证state,请关闭此行
// 微博、微信:特别指定用于手机端登录【正常情况下不设置】,则需要设定->setDisplay('mobile')
// 3、 得到授权跳转地址
$url = $oauth->getRedirectUrl();
// 4、重定向到外部授权地址
return redirect()->away($url);
} catch (Exception $e) {
// 错误处理...
}
}
/**
* 回调&通知
*/
public function callback()
{
try {
/** 1、初始化实例类 */
$oauth = OAuth::Qq();
/** 2、可选:手动验证state 并返回跳转前传入的参数 */
$callbackUrl = $oauth->mustCheckState()->checkState(); // 如需手动验证state,请关闭此行
/** 3、获取第三方用户信息 */
$userInfo = $oauth->userInfo(); // 【推荐】处理后的用户信息
// OR
// $userInfo = $oauth->getUserInfo(); // 原始用户信息
/**
* 如果是App登录
* $type = "applets";
* $userInfo = OAuth::$name($this->config)->setType($type)->userInfo();
*/
/**
* 如果是App登录
* $type = "applets";
* $userInfo = OAuth::$name($this->config)->setType($type)->userInfo();
*/
// 获取登录类型
// $userInfo['type'] = ConstCode::getTypeConst($userInfo['channel']);
// 记录用户信息
// 其他逻辑...
} catch (Exception $e) {
// 错误处理...
}
}
}
← 上一篇「随机字符串」 下一篇「微博登录」 →