最近在做第三方登录。大体流程是首先开发者在第三方平台上注册一个应用。 一般你的域名空间要备过案的比较容易检核通过。 然后获取到appid跟appkey。
然后再用你的key,调用第三方平台的接口。获取登录信息。 实现第三方的登录。 如果自己网站本身有登录体系的话。可以在用户第一次用第三方登录的时候为用户创建本地账号。 用户可以修改自己的账号信息。
无意间找到一个集成了多种第三方登录的叫做thinkSDK的东西。可以直接拿过来用。
不过这个东西是基于thinkPHP比较早的版本。现在做这个项目是基于thinkPHP3.2.2的。 所以很多地方要做不少修改才能运用到新的thinkPHP版本中来。
调通了整个流程。记录下来给有需要的人看一看。其实自己去调通一下,对thinkPHP的一些东西也会有更深的了解。
这里以qq互联的登录为例子。到QQ互联申请key。这些就不讲了。 只说thinkSDK, 点这里查看出处,下载原版demo。
1.文件放置位置:
thinkSDK放置的位置:ThinkPHP/Library/Org/ThinkSDK/。
event文件夹放到模块下比如Admin模块下面。跟Controller文件夹同一个位置。
2.命名空间与类的引入。实例化。
(1)ThinkOauth.class.php:
(2)TypeEvent.class.php:
其他的也一样。
3.ThinkOauth.class.php的一些修改。
public function __construct($token = null){ //设置SDK类型 $class = get_class($this); $this->Type = strtoupper(substr($class, 0, strlen($class)-3)); //下面三句是我添加的。 $typeArr = explode('\\',$this->Type); $typeLen = count($typeArr); $this->Type = $typeArr[$typeLen-1]; //获取应用配置 $config = C("THINK_SDK_{$this->Type}"); if(empty($config['APP_KEY']) || empty($config['APP_SECRET'])){ E('请配置您申请的APP_KEY和APP_SECRET'); } else { $this->AppKey = $config['APP_KEY']; $this->AppSecret = $config['APP_SECRET']; $this->Token = $token; //设置获取到的TOKEN } }
public static function getInstance($type, $token = null) { $name = ucfirst(strtolower($type)) . 'SDK'; $path="\Org\ThinkSDK\sdk\\$name";//注意这里与下面一句来实例化类的方式。 return new $path($token); }
还有halt函数,也用E方法来代替。
5.在Cotroller(控制器)中调用。例如(注意里面类的实例化方式):
//第三方登录 public function thirdLogin($type = null){ empty($type) && $this->error('参数错误'); $sns = \Org\ThinkSDK\ThinkOauth::getInstance($type); //跳转到授权页面 redirect($sns->getRequestCodeURL()); }
我这里在回调里去获取openid以及用户的信息。要我们的数据表中建立对应的字段保存openid。 先检索一下是否已有该id。从而确认用户是否第一次登录。如果是第一次登录,则保存openid以及用户名。 保存用户名的时候会有一个问题。因为账号是自动创建的,那么要考虑到用户名是不能重复的。所以也要查询一下用户名是否存在。比如我的qq用户名是runner,如果用户名存在的话,就模糊查询 username like 'runner%' 。 查出来有3个runner开头的。那么我新注册这个账号就自动给他名字runner3或runner4。
创建了用户之后,再查找用户信息,进行本地的登录流程。 保存相应的session以获取本地系统的权限。
7.Over。 有问题或建议欢迎留言讨论。
转载请注明出处:http://blog.csdn.net/liusaint1992/article/details/50354154