为用户中心LayCenter添加一个社交登录扩展插件
LayCenter预留了社交登录扩展接口,可以方便的接入新的第三方社交登录,在此之前需要了解一下如何创建一个扩展插件 ,创建扩展教程地址:https://kfuu.cn/zblogjiaocheng/89.html
在LayCenter上接入一个新的社交登录是一个非常简单的事情。只需要两步:在callback完成后调用公共方法 和 挂载一个多功能接口
callback页面
<?php
//.......这里应当编写实际需要的回调代码,需要获得openid 昵称 头像信息
//用自己的方法获取已绑定的用户对象
$member = new Member;
$member->LoadInfoByFields(array('meta' => array('tyy_openid' => $openid)));
//最后向LayCenter提交openid 昵称 头像信息,接下来由LayCenter继续完成
$lcp->login->oAuthCallback( $member,'189天翼', $user_id, $nickname, $avatar);
//调用oAuthorCallback方法:
//参数一:已绑定的用户对象,未绑定的可以传入一个新用户对象或空值
//参数二:社交账户类型名称
//参数三:第三方登录平台提供的唯一的用户ID
//参数四:社交账户的昵称
//参数五:社交账户的头像链接
挂载接口
Add_Filter_Plugin('Filter_LayCenter_oAuth_Connect','LayCenter_demo_oAuth_Connect');
function LayCenter_demo_oAuth_Connect(){
global $zbp,$lcp;
return array(
'icon' => 'iconfont icon-tianyiyun', //社交登录图标的class值
'name' => '189天翼', //社交账号名称,(社交账号之间的名称不能相同,并且这里的名称必须和callback页面中传入oAuthCallback的第二个参数值相同)
'login'=> $zbp->host.'zb_users/LayCenter/alipaylogin/login.php', //社交账号登录或绑定地址
'callback' => array(
'bind' => function($member, $name, $openid, $nickname, $avatar)use($lcp){
//用户在进行绑定操作时,会回调此函数。
//参数一:$member 执行绑定的用户对象
//参数二:$name 为社交账号类型名称,示意例代码中这个值传入的是“189天翼”
//参数三:$openid 社交账户返回的openid 这里是callback页面中传入的内容
//参数四:$nickname 社交账户上的昵称 这里是callback页面中传入的内容
//参数五:$avatar 社交账户上的头像 这里是callback页面中传入的内容
$member->Metas->tyy_openid = $openid;
return true;
//如果是存在$member对象(表)中,不需要进行$member->Save()保存
},
'isBind' => function($member)use($lcp){
//在检测用户是否绑定此社交账户时,会回调此代码,返回true代表已经绑定,false代表未绑定
//参数一:$member 检测的用户对象
return (bool)$member->Metas->tty_openid;
},
'unBind' => function($member)use($lcp){
//解绑社交账户时,会回调此代码
//参数一:$member 检测的用户对象
$member->Metas->Del('tyy_openid');
//这里只需要将绑定的信息删除即可,如果是存在$member对象(表)中,不需要进行$member->Save()保存
}
)
);
}
至此一个新的社交账户登录就算接入完成。
回调函数说明
bind 回调函数,当用户执行绑定的时候会回调此函数,这里只需要将openid和用户建立一个对应关系就行,可以记录在$member的Meta中,也可以记录在其它表
isBind 回调函数,在社交绑定页面中或登录时,会回调此函数,这里只需要判断一下用户有没有绑定过此社交账户,返回true 或 false
unBind 回调函数,在用户进行解绑操作时会回调此函数,只需要将用户的绑定关系解除即可