zoukankan      html  css  js  c++  java
  • 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跑路,到其他页面,慢慢弄。

  • 相关阅读:
    【SCOI 2011】 糖果
    【POJ 3159】 Candies
    【POJ 1716】 Integer Intervals
    【POJ 2983】 Is the information reliable?
    【POJ 1364】 King
    【POJ 1201】 Intervals
    【POJ 1804】 Brainman
    6月10日省中提高组题解
    【POJ 3352】 Road Construction
    【POJ 1144】 Network
  • 原文地址:https://www.cnblogs.com/dwj97/p/6530568.html
Copyright © 2011-2022 走看看