原作者:杜文建

原博客: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 yii\web\SaeAuth;
use yii\base\Exception;
use yii\web\NotFoundHttpException;
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框架中的使用方式

yii2微博第三方登录的更多相关文章

  1. django项目微博第三方登录

    此处咱们用到的是 social_django,所以要把此应用注册到配置文件中, INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.a ...

  2. 微博第三方登录时,域名使用错误报错, Laravel \ Socialite \ Two \ InvalidStateException No message

    使用微博第三方登录时,报错 Laravel \ Socialite \ Two \ InvalidStateException No message Laravel \Socialite \Two \ ...

  3. Django 2.0.4 微博第三方登录

    三方登录逻辑 理解第三方登录的流程: 用户向本地应用商城发起请求,我要用微博进行登录 我们的商城凑一个url让用户跳转到第三方应用的url(微博的登录页面) 用户在该界面点击输入用户名密码之后,点击授 ...

  4. Django rest framework集成微博第三方登录

    Django restframework 集成第三方登录(微博.微信.QQ等) 友情链接 python-social-auth-app官方文档 微博开放者平台 QQ开放者平台 准备工作 1.注册微博开 ...

  5. Unity利用Share SDK实现QQ、微信及微博第三方登录及定制内容分享(附代码)

    最近因为公司的项目需要添加一些实用性的功能,需要添加第三方登录及分享,采用的是Mob的SDK,可以先到其官网下载对应的SDK 点击这里,为了方便后期进行数据统计和分析,所以可以先添加一个应用,添加成功 ...

  6. OAuth2.0 social_django微博第三方登录

    python网站第三方登录,social-auth-app-django模块, social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块 目前流行的第三方 ...

  7. OAuth实现腾讯微博第三方登录

    前言 还是得弱弱的写下这个技术的背后,大概是这个样子的,看到OAuth这个单词,我就想到了权限这个词,不知道为什么,又想起了第三方登录这个技术,于是自己脑补了一下,应该这两个东西是有关系的.再就是去动 ...

  8. 微博第三方登录使用social_django实现显示登陆的用户名

    首先修改social_soce源码,将用户信息添加进cookie 将其修改为:  response =  backend.strategy.redirect(url)    payload = jwt ...

  9. 【Demo】QQ,github,微博第三方社交登录

    本文主要讲解 集成 第三方社交账号登录 为什么会有这个需求? 主要是因为目前互联网的网站数量太多,如果在各个站点都注册一个账号 用户非常不容易记住每个账号的用户名和密码,并且非常难保证每个账号的密码足 ...

随机推荐

  1. idea ssm项目出现日志中文乱码,封装的json中的msg字段中文乱码(但是json封装的bean中的字段不乱码)等其他各种项目下的中文乱码解决方案

    开头划重点!(敲黑板):rebuild和mvn package的循环往复好几次的操作是解决这个问题的最主要的方法! 经过多次试验,发现这样做就可以正常显示中文了 我说为什么有时候乱码,有时候中文正常, ...

  2. meterpreter lhost设置

    如果要监听kali本地的话,设置 0.0.0.0

  3. NGUI可展开列表的实现

    本文来自网易云社区 作者:汪毅军 最近使用了NGUI做了下可展开列表,其主要思路如下:首先最外层使用Scroll view以达到滑动效果,然后列表使用UITable进行排列,最后通过点击Item控制I ...

  4. 【轮子狂魔】抛弃IIS,向天借个HttpListener - 基础篇(附带源码)

    这一次我们要玩什么? 先声明一下,由于这篇是基础篇主要是通过这篇文章让大家对使用HttpListener响应Http请求有个大概了解,所以正式的花样轮子在下一篇推出,敬请期待 ^_^ 嗯哼,还有,我标 ...

  5. lua编程之元表与元方法

    一. 前言 lua是一种非常轻量的动态类型语言,在1993年由由Roberto Ierusalimschy.Waldemar Celes 和 Luiz Henrique de Figueiredo等人 ...

  6. Jmeter参数的AES加密使用

    在Jmeter日常实践中,大家应该都遇到过接口传参需要加密的情况.以登陆为例,用户名和密码一般都需要进行加密传输,在服务端再进行解密,这样安全系数会更高,但在使用jmeter进行接口测试的时候,怎样发 ...

  7. 关于Netty的学习前总结

    摘要 前段时间一直在学习netty因为工作忙的原因没有写一个学习的总结,今天抽个空先把总结写了吧.事先声明,本文不会详细的介绍每一个部分不过每个部分都会附上讲解详细的url.本文只是为了解释通Nett ...

  8. 我的Cocos Creator成长之路1环境搭建以及基本的文档阅读

    本人原来一直是做cocos-js和cocos-lua的,应公司发展需要,现转型为creator.会在自己的博客上记录自己的成长之路. 1.文档阅读:(cocos的官方文档) http://docs.c ...

  9. EventBus的基本使用步骤

    为什么要使用EventBus 当我们进行项目开发的时候,往往是需要应用程序的各组件间进行通信,比如在子线程中进行请求数据,当数据请求完毕后通过Handler或者是广播通知UI, 通常两个Activit ...

  10. docker 下载安装与配置

    # mac离线安装dockerhttps://download.docker.com/mac/stable/24312/Docker.dmg # windows离线安装dockerhttp://mir ...