• yii2微博第三方登录


    原作者:杜文建

    原博客:http://www.cnblogs.com/dwj97/p/6530568.html

    yii2微博第三方登录

     

    微博登录是最常用的第三方账号登录之一。由于其网站用户量大,可操作接口功能多,所以受到很多开发者的青睐。

    既然是第三方,如果想使用它们的账号进行登录,那么第一步就应该申请一个开发账号。

    前面啰嗦两句,这里有两个条件是硬性的,否则将影响你的开发。

    1. 微博账号,这个应该都有。
    2. 域名和服务器,也就是说你要有你自己的网站。不过为公司开发就方便多了。

    申请开发账号

    首先去微博开放平台:http://open.weibo.com/connect,点击立即接入,填写一个表单,验证一下网站就OK了

    之后你在我的应用里面就可以看到你申请的应用。当前状态是未提交审核,待你开发完了上线后,提交微博审核,审核通过后即可正常使用。(未审核之前只能是测试账号访问)

    到这一步为止,我们就可以先进行开发工作。进入网站信息页面,首先获取我们需要的app_id和secret信息。

    下面我们进入开发,我们这里使用YII2框架,高级版本。其他框架原理相同。

    1、整合代码

    开发之前,我们要先去微博官网下载一个SDK来加速我们的开发。毕竟人家都写好了,拿来用比较方便。

    下载下来大概长这个样子:

    • 其中saetv2.ex.class.php是他的核心文件,其他文件基本都是辅助作用。
    • index.php文件是首页,其实他的唯一作用就是产生一个微博登录跳转链接。
    • config.php是一些配置文件,就是你刚刚从官网申请来的app_id之类的
    • callback.php是你跳转到微博后,它再跳转回来的一个地址。
    • weibolist.php是授权成功后,你获取到他的微博列表的一个demo

    这个文件夹文件可以直接放在网站根目录访问,不过我们不准备这样做,我们要把他们拆分了,直接集成到YII

    首先针对config.php文件,这个也最简单,我们打开它,发现只有几行代码。

    <?php
    header('Content-Type: text/html; charset=UTF-8');
    
    define( "WB_AKEY" , 'xxxxxxxxxx' );
    define( "WB_SKEY" , 'xxxxxxxxxxxxxxxxxxxxxxxxx' );
    define( "WB_CALLBACK_URL" , 'http://xxxxxxxxxxxx/callback.php' );

    其实就是配置了app_id,app_secret,callback我们把他们扔到Yii配置文件params.php

    'weibo'=>[
            'app_key'=>'你的app_key',
            'app_secret'=>'你的app_secret',
            'back_url'=>'你的回跳地址,比如:http://www.bidianer.com/login/weibo-back(这是我的)'
        ],
    
     

    下面我们看下,saetv2.ex.class.php,打开后我们发现,这个文件里面有两个类,为了便于开发,我们将其拆分成为2个文件存放。第一个文件存放靠上面的类,第二个文件存放靠下面的类。同时,我们将其拷贝到Yii2目录vendor/yiisoft/yii2/web,这个随自己喜欢。

    我们将拆分后的文件命名为SaeAuth.phpSaeTClientV2.php,类名同文件名。同时加上命名空间yii web(这里反斜杠打不出来)。

    2、控制器开发

    下面我们来到控制器开始做真正开发工作。

    1、新建LoginController.php,在init方法中,我们将配置信息加载过来:

    在此之前你需要

    use yiiwebSaeAuth;
    use yiiaseException;
    use yiiwebNotFoundHttpException;
    class LoginController extends Controller
    {
    public $app_key;
    public $app_secret;
    public $back_url;
        public  function init()
        {
            $this->app_key = Yii::$app->params['weibo']['app_key'];
            $this->app_secret = Yii::$app->params['weibo']['app_secret'];
            $this->back_url = Yii::$app->params['weibo']['back_url'];
        }
    }
    

    2、新建登录首页index方法,同时生成微博跳转链接

    public function actionIndex()
    {
    
        $sea = new SaeAuth($this->app_key , $this->app_secret);
        $weibo_url = $sea->getAuthorizeURL($this->back_url);
        return $this->render("index",['url'=>$weibo_url]);
    }
     

    在此之前你需要 use/yii/web/SaeAuth(这里反斜杠打不出来)

    3、接下来我们新建weibo-back方法来处理微博回跳后处理。

    获取微博返回参数code

    $code = Yii::$app->request->get('code');

    获取token

    $sea = new SaeAuth($this->app_key , $this->app_secret);
    if ($code)
    {
        $keys = array();
        $keys['code'] = $code;
        $keys['redirect_uri'] = $this->back_url;
        try {
            $token = $sea->getAccessToken( 'code', $keys ) ;
        } catch (Exception $e) {
            throw new NotFoundHttpException;
        }
    }

    下面如果获取token成功,我们就将其放入session存起来,留着后面用

    if ($token)
    {
        $session = Yii::$app->session;
                $session['token'] = [
                    'access_token'=>$token['access_token'],
                    'uid'=>$token['uid'],
                    'lifetime'=> 24*3600 // 这里我设置了一天,你们可以自己设置合适时间
                ];
        $this->redirect(Url::toRoute('/login/complete-info'));
    }

    为啥我们不在这个页面处理其他逻辑?因为,code不能重复利用,啥意思?就是在这个页面:http://www.bidianer.com/login/weibo-back?code=XXXX你不能刷新,否则微博就给你个错误。所以我们拿到code获取token,就赶紧放session跑路,到其他页面,慢慢弄。

    比较下yii框架中的第三方登录与原SDK的差别:

    1)yii框架中添加了命名空间,原SDK没有

    2)原SDK 的两个类时放在一个类文件中的;而yii框架的是将两个类分别放在两个类文件中

    3)原SDK中的skey,akey 保存在常量中, yii框架的存在 配置文件param.php 中

    总结: 懂得了yii框架中配置文件的参数是怎么调取的;及第三方类在yii框架中的使用方式

  • 相关阅读:
    hsdis反汇编java源码工具的使用方法
    final添加内存屏障问题
    Spring-AOP
    Spring-IOC
    IO与NIO
    设计模式学习笔记
    Redis学习笔记
    MySQL优化
    STAR法则
    大文件分割之Linux
  • 原文地址:https://www.cnblogs.com/xiaotaoing/p/6687377.html
Copyright © 2020-2023  润新知