• Yii2 使用 QQ 和 Weibo 第三方登录源码


    我们社区在 yii2-authclient 多次升级后,登录异常。一直想寻求一种通用的方法,尽量不重写 OAuth2BaseOAuth 以及 OAuthToken 类, 所以本次直接在 initUserAttributes 方法返回结果的地方去修改,这样会受 yii2-authclient 升级影响较小,我把 QQClient.php 和 WeiboClient.php 放在 frontend/widgets 下了,接下来我们来看代码!

    QQClient.php

    您的邮箱 2594396825@qq.com 还未验证,请尽快登录邮箱查收邮件并激活。如果您未收到邮件,点此重新发送。 ×
    首页
    源码
    Yii2 使用 QQ 和 Weibo 第三方登录源码
    Yii2 使用 QQ 和 Weibo 第三方登录源码 [ 2.0 版本 ]
     ╃巡洋艦㊣
     2016-09-03 18:17:33
     11219次浏览
     24条评论
     88
     24 0
    我们社区在 yii2-authclient 多次升级后,登录异常。一直想寻求一种通用的方法,尽量不重写 OAuth2, BaseOAuth 以及 OAuthToken 类, 所以本次直接在 initUserAttributes 方法返回结果的地方去修改,这样会受 yii2-authclient 升级影响较小,我把 QQClient.php 和 WeiboClient.php 放在 frontend/widgets 下了,接下来我们来看代码!
    
    QQClient.php
    <?php
    
    namespace frontendwidgets;
    
    use yiiauthclientOAuth2;
    use yiiwebHttpException;
    use Yii;
    
    class QQClient extends OAuth2
    {
        public $authUrl = 'https://graph.qq.com/oauth2.0/authorize';
    
        public $tokenUrl = 'https://graph.qq.com/oauth2.0/token';
    
        public $apiBaseUrl = 'https://graph.qq.com';
    
    
        protected function initUserAttributes()
        {
            $user = $this->api('user/get_user_info', 'GET', ['oauth_consumer_key' => $this->user->client_id, 'openid' => $this->user->openid]);
    
            return [
                'client' => 'qq',
                'openid' => $this->user->openid,
                'nickname' => $user['nickname'],
                'gender' => $user['gender'],
                'location' => $user['province'] . $user['city'],
            ];
        }
    
        /**
         * @inheritdoc
         */
        protected function getUser()
        {
            $str = file_get_contents('https://graph.qq.com/oauth2.0/me?access_token=' . $this->accessToken->token);
    
            if (strpos($str, "callback") !== false) {
                $lpos = strpos($str, "(");
                $rpos = strrpos($str, ")");
                $str = substr($str, $lpos + 1, $rpos - $lpos -1);
            }
    
            return json_decode($str);
        }
    
        /**
         * @inheritdoc
         */
        protected function defaultName()
        {
            return 'QQ';
        }
    
        /**
         * @inheritdoc
         */
        protected function defaultTitle()
        {
            return 'QQ 登录';
        }
    }
    

      

    WeiboClient.php

    <?php
    
    namespace frontendwidgets;
    
    use yiiauthclientOAuth2;
    use yiiwebHttpException;
    use Yii;
    
    class WeiboClient extends OAuth2
    {
        public $authUrl = 'https://api.weibo.com/oauth2/authorize';
    
        public $tokenUrl = 'https://api.weibo.com/oauth2/access_token';
    
        public $apiBaseUrl = 'https://api.weibo.com/2';
    
        protected function initUserAttributes()
        {
            $user = $this->api('users/show.json', 'GET', ['uid' => $this->user->uid]);
    
            return [
                'client' => 'weibo',
                'openid' => $user['id'],
                'nickname' => $user['name'],
                'gender' => $user['gender'],
                'location' => $user['location'],
            ];
        }
    
    
        /**
         * @inheritdoc
         */
        protected function getUser()
        {
            $str = file_get_contents('https://api.weibo.com/2/account/get_uid.json?access_token=' . $this->accessToken->token);
            return json_decode($str);
        }
    
        /**
         * @inheritdoc
         */
        protected function defaultName()
        {
            return 'Weibo';
        }
    
        /**
         * @inheritdoc
         */
        protected function defaultTitle()
        {
            return '微博登录';
        }
    }
    

      

  • 相关阅读:
    Java 发送http post 请求
    经纬度计算
    js cookie操作
    wdatepicker默认时间为当前时间
    基于ssm的poi反射bean实例
    jbox小型交互表单(ajax)
    点击图片查看大图(纯js)
    查询物理表字段(mysql)
    离线安装 Cloudera ( CDH 5.x )(转载)
    sed命令详解 (转载)
  • 原文地址:https://www.cnblogs.com/echojson/p/10766010.html
Copyright © 2020-2023  润新知