PHP 第三方登陆库:socialLogin
2015-12-14 14:01
435 查看
SocialLogin 是一个简单易用的跨框架第三方登陆库,专注和致力于解决第三方登陆的问题,无需再看官方手册,一个一个服务商去接入登陆服务,现在只需要使用 SocialLogin库,把接入的服务商appkey 和 appsecret填好,立即就可以使用,让你无需关心细节实现,专注实现业务逻辑。
如果你还不懂如何使用composer,请看:composer中国镜像
在框架的控制器中,建立一个Action来统一处理第三方登陆,以下的例子是假设在user的控制器中添加一个socialLogin的Action来处理
<?php
// 声明包引用
use Barbery\SocialLogin\SocialLogin;
class User extend Controllers
{
# 其他Action....
/**
* @name 第三方登陆统一网关
* @method GET
* @param string redirectUrl Y 第三方登陆完毕跳回地址
* @return mixed
*/
public function socialLoginAction()
{
// 配置可以移到框架的配置文件里面
$config = [
'proxy' => [
'dns' => '127.0.0.1:1080',
'type' => CURLPROXY_SOCKS5
],
'weibo' => [
'key' => '111111111',
'secret' => 'xxxxxxxxx',
'redirectUrl' => '/user/socialLogin?type=weibo',
'scope' => 'email'
],
'qq' => [
'key' => '111111111',
'secret' => 'xxxxxxxxxxxx',
'redirectUrl' => '/user/socialLogin?type=qq',
],
'google' => [
'key' => 'xxxxxxxxxxxxxx',
'secret' => 'xxxxxxxxxx',
'redirectUrl' => '/user/socialLogin?type=google',
'scope' => 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile', 'enableProxy' => true,
],
'github' => [
'key' => 'xxxxxxxxxxxx',
'secret' => 'xxxxxxxxxxxxx',
'redirectUrl' => '/user/socialLogin?type=github',
],
];
try {
$obj = new SocialLogin($config);
$socialInfo = $obj->authAndGetUserInfo();
} catch (Exception $e) {
echo $e->getMessage(), '具体原因:' . print_r($obj->getLastError(), true);
exit;
}
print_r($socialInfo);
// Array
// (
// [nickname] => 偶尔陶醉
// [face] => http://tp1.sinaimg.cn/1763035100/180/5684566873/1 // [gender] => 1
// [openid] => 11111111
// [access_token] => xxxxxxxxxxxxxx
// [timeout] => 1600413552
// [refresh_token] =>
// [from] => weibo
// )
if ( ! User::isExist($socialInfo['openid'], $socialInfo['from'])) {
# 如果用户不存在, 引导用户完成后续注册
} else {
# 用户存在,则完成登陆
redirect($_GET['redirectUrl']);
}
}
# 其他Action....
}
?
配好后,如果用户需要第三方登陆,只需要引导用户跳转到/user/socialInfo?type={$type}&redirectUrl=/index下就可以了,$type为你传进去的配置,例如,你只设置了google和github的登陆,type就只能是google或github,redirectUrl参数是当用户成功登陆后, 跳回地址。
目前支持的第三方登陆有:Github,Google,QQ,Weibo,后续会不断增加,支持的列表可以从这里看到。
配置demo:
?
private function getInstance()
获取sdk对象
public function authAndGetUserInfo()
引导用户授权且获取用户信息,该方法统一返回一个userInfo数据结构
?
public function getAuthorizeURL()
获取第三方授权地址
public function getFullUserInfo()
获取全部返回的用户信息
public function getLastError()
获取返回的最后的一个错误信息
array(
'code' => '第三方登陆服务商返回错误码',//如果发生错误且服务商没有返回错误码则为-1,没有错为0
'msg' => '第三方登陆服务商返回的错误msg'
);
?
如何安装 | Installation
composer require barbery/social-login:dev-master
如果你还不懂如何使用composer,请看:composer中国镜像
如何使用 | Usage
在框架的控制器中,建立一个Action来统一处理第三方登陆,以下的例子是假设在user的控制器中添加一个socialLogin的Action来处理<?php
// 声明包引用
use Barbery\SocialLogin\SocialLogin;
class User extend Controllers
{
# 其他Action....
/**
* @name 第三方登陆统一网关
* @method GET
* @param string redirectUrl Y 第三方登陆完毕跳回地址
* @return mixed
*/
public function socialLoginAction()
{
// 配置可以移到框架的配置文件里面
$config = [
'proxy' => [
'dns' => '127.0.0.1:1080',
'type' => CURLPROXY_SOCKS5
],
'weibo' => [
'key' => '111111111',
'secret' => 'xxxxxxxxx',
'redirectUrl' => '/user/socialLogin?type=weibo',
'scope' => 'email'
],
'qq' => [
'key' => '111111111',
'secret' => 'xxxxxxxxxxxx',
'redirectUrl' => '/user/socialLogin?type=qq',
],
'google' => [
'key' => 'xxxxxxxxxxxxxx',
'secret' => 'xxxxxxxxxx',
'redirectUrl' => '/user/socialLogin?type=google',
'scope' => 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile', 'enableProxy' => true,
],
'github' => [
'key' => 'xxxxxxxxxxxx',
'secret' => 'xxxxxxxxxxxxx',
'redirectUrl' => '/user/socialLogin?type=github',
],
];
try {
$obj = new SocialLogin($config);
$socialInfo = $obj->authAndGetUserInfo();
} catch (Exception $e) {
echo $e->getMessage(), '具体原因:' . print_r($obj->getLastError(), true);
exit;
}
print_r($socialInfo);
// Array
// (
// [nickname] => 偶尔陶醉
// [face] => http://tp1.sinaimg.cn/1763035100/180/5684566873/1 // [gender] => 1
// [openid] => 11111111
// [access_token] => xxxxxxxxxxxxxx
// [timeout] => 1600413552
// [refresh_token] =>
// [from] => weibo
// )
if ( ! User::isExist($socialInfo['openid'], $socialInfo['from'])) {
# 如果用户不存在, 引导用户完成后续注册
} else {
# 用户存在,则完成登陆
redirect($_GET['redirectUrl']);
}
}
# 其他Action....
}
?
配好后,如果用户需要第三方登陆,只需要引导用户跳转到/user/socialInfo?type={$type}&redirectUrl=/index下就可以了,$type为你传进去的配置,例如,你只设置了google和github的登陆,type就只能是google或github,redirectUrl参数是当用户成功登陆后, 跳回地址。
配置说明 | Config
目前支持的第三方登陆有:Github,Google,QQ,Weibo,后续会不断增加,支持的列表可以从这里看到。配置demo:
?
[ // 支持代理设置,国内的GFW,登陆google时你懂的 'proxy' => [ 'dns' => '127.0.0.1:1080', //代理类型,具体请看 curl CURLOPT_PROXYTYPE 选项说明:http://php.net/manual/zh/function.curl-setopt.php 'type' => CURLPROXY_SOCKS5 ], // 第三方登陆应用设置 // 服务商 'weibo' => [ //应用信息 'key' => '11111111111', 'secret' => 'xxxxxxxxxxxxxxx', // 授权返回地址,注意:这里需要跳回到统一的第三方处理action, 其中type参数要和服务商对应不可缺失 'redirectUrl' => '/user/socialLogin?type=weibo', // 授权内容 'scope' => 'email' ], 'qq' => [ 'key' => '11111111111', 'secret' => 'xxxxxxxxxxxxxxx', 'redirectUrl' => 'http://cvmeta.com/user/socialLogin?type=qq', ], 'google' => [ 'key' => 'xxxxxxxxxxxxxxx', 'secret' => 'xxxxxxxxxxxxxxx', 'redirectUrl' => '/user/socialLogin?type=google', 'scope' => 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile', // 是否启用代理 'enableProxy' => true, ], 'github' => [ 'key' => 'xxxxxxxxxxxxxxx', 'secret' => 'xxxxxxxxxxxxxxx', 'redirectUrl' => '/user/socialLogin?type=github', ], ];
文档 | Document
private function getInstance()获取sdk对象
public function authAndGetUserInfo()
引导用户授权且获取用户信息,该方法统一返回一个userInfo数据结构
?
<?php $userInfo = array( 'nickname' => '第三方昵称', 'face' => '第三方头像url,优先拿大图', 'gender' => '性别',//1为男,2为女,0为未设置或未知 'openid' => '第三方唯一身份标识id', 'access_token' => '授权access_token', 'timeout' => 'access_token过期时间戳', 'refresh_token' => 'refresh_token','如果有则返回,无则为空字符串', 'from' => '第三方来源标识'//google,github,weibo,qq...etc. );
public function getAuthorizeURL()
获取第三方授权地址
public function getFullUserInfo()
获取全部返回的用户信息
public function getLastError()
获取返回的最后的一个错误信息
array(
'code' => '第三方登陆服务商返回错误码',//如果发生错误且服务商没有返回错误码则为-1,没有错为0
'msg' => '第三方登陆服务商返回的错误msg'
);
?
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- PHP VBS JS 函数 对照表
- C语言实现的统计php代码行数功能源码(支持文件夹、多目录)
- php xml 入门学习资料