python的flask实现第三方登录怎么写_关于qq和新浪微博的第三方登陆|python|flask

前些日子研究了一下qq和新浪微博的第三方登陆的东西,发现其实难度并不大。来给大家分享一下我的经验和流程。

不论是qq还是新浪微博的第三方登陆都是用了Oauth2.0授权流程,唯一不同的是qq多了一个openid的获取,多了一步。

先介绍一下Oauth2.0的大致授权流程。在授权过程中大致有三个对象。一个是服务提供方(第三方网站)、一个是用户(将资源放在服务提供方存放的对象)、还有一个就是客户端(向服务提供放请求用户资源的对象)。首先,客户端向服务提供方发起请求,请求服务提供方的一个临时令牌,这个临时令牌是进行下一步的基础,服务提供方先要验证一下客户端的身份,验证成功后会给客户端所要的临时令牌。接下来客户端会引导用户进行授权操作,用户进入服务提供方提供的页面,完成授权以后服务提供方会给客户端一个访问令牌并调转回客户端的网页。通过访问令牌,客户端就可以获得用户在服务提供方上的若干权限。

了解了Oauth2.0的授权机制,下面就开始介绍实例。显示新浪微博的。

首先,要成为新浪微博的开发者,http://open.weibo.com/wiki/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97,这是申请开发者的大致流程,申请完成后就可以创建应用,然后新浪微博就会给你你的app_id和app_secret,这两样东西就是你的网站认证新浪微博的凭证,根据这个凭证你才能引导用户到新浪微博的授权界面。

第一步,在你的网站上引导用户进入授权界面,实际上这一步包含了你的网站向服务提供方申请临时令牌和用户完成授权这两步。引导用户进入https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&response_type=code&redirect_url=YOUR_REGISTERDE_REDIRECT_URL

上面的红字部分是要自己填入的信息。其他地方不用改动。用户输入用户名和密码,完成授权,之后会跳转到YOUR_REGISTERDE_REDIRECT_URL,并且会在url上多出”code=~~~~~~“的信息,这些是可以在后台通过GET方法获得的。

第二步,通过第一步的code向服务提供方换取访问令牌,在新浪微博上就是access_token。在后台完成向https://api.weibo.com/oauth2/access_token?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=authorization_code&redirect_url=YOUR_REDIRECT_URL&code=CODE的请求。

以上的红字是自己要填入的。通过上面的网址实际上是在用GET方法发起请求。响应会发回一个json字典,其中就有我们想要的access_token,字典中还有其他项,包括用户id,access_token的有效时间(秒为单位)等信息。

实际上完成上边的两步后,我们就已经获得了我们想要的权限了。http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI,通过这个网址上的信息,再加上我们完成上边两步后所获的的东西,我们就可以实现想要的目的了。

1 #-*-coding:utf8 -*-

2 importurllib3 importurllib24 importjson5 data1 = {"client_id":"","client_secret":""}6 data1 =urllib.urlencode(data1)7 url1 = "https://api.weibo.com/oauth2/access_token?grant_type=authorization_code&redirect_uri=&code=854e96627e23b6a31fea50cd242a681e"

8 #上边url1中的code是我手动在浏览器上运行授权url获取的,实际开发中是可以在网站后台获取的,就不用人工的去获取了

9

10

11 req1 =urllib2.Request(url1,data1)12 response1 =urllib2.urlopen(req1)

13 #这里返回的是一个json格式的数据,通过解析可以从中获取access_token14 response1 =json.loads(response1.read())15 access_token = response1['access_token']16 #print(access_token)1718

19 #一下是一个例子,以用户的名义发一条新浪微博

20 url2 = "https://api.weibo.com/2/statuses/update.json"

21 status = u"这是用来测试的,请直接忽略!"

22 status = status.encode("utf8")23 data2 ={"source":"","access_token":access_token,"status":status}24 #这里要注意source其实就是app_id

25 data2 =urllib.urlencode(data2)26 req2 =urllib2.Request(url2,data2)27 response2 =urllib2.urlopen(req2)28 response2=json.loads(response2.read())29 print(response2)30 #这里用来获取响应信息

下面介绍一下qq的流程,熟悉了新浪微博的授权流程,qq的流程就要好理解的多。qq的官方文档写得要比新浪微博的清楚明了的多,我就借用一下qq的文档。

开始下面操作之前,你要去qq那里申请开发者许可,并申请要开发的网站或者应用以得到client_id和client_secret,还有你的redirect_url

第一步,请求临时令牌,并引导用户授权。

url:https://graph.qq.com/oauth2.0/authorize

method:GET

这一步的重点在获取code。

第二步,请求访问令牌access_token

url:https://graph.qq.com/oauth2.0/access_token

method:GET

这一步的重点在于获得access_token

第三步,获得open_id,这是qq与新浪微博所不同的,也是多了这一步。

url:https://graph.qq.com/oauth2.0/me

method:GET

完成了这一步就已经获得了所有要用到的参数,这样就可以完成我想要的所有权限了。

#-*-coding:utf8-*-

importurllibimporturllib2importjson

response_type= "code"client_id= ""client_secret= ""redirect_uri= ""#以上的信息是要自己去申请开发网站时给开发者分配的

url_code= "authorization code"url1= "https://graph.qq.com/oauth2.0/token"url1= url1+"?grant_type=authorization_code&"+\"client_id="+client_id+\"&client_secret="+client_secret+\"&code=5CB3DB81F0718CE44ADD33A78F53E4A0"+\"&redirect_uri="+redirect_uri

#上面的code是我自己现在浏览器上手动完成第一步得到的,如果能在服务器上的话,是可以在后台完成对code的获取的,就不用这么麻烦了

req1=urllib2.Request(url1)

response1=urllib2.urlopen(req1)

m=((response1.read()).split('&'))[0]

access_token=(m.split('='))[1]#print access_token

#这里由于返回的是一个字符串,所以对返回的字符串操作,从中获取access_token

url2="https://graph.qq.com/oauth2.0/me"url2=url2+"?access_token="+access_token

req2=urllib2.Request(url2)

response2=urllib2.urlopen(req2)

dic=(response2.read())[10:-3]

ajson=json.loads(dic)

openid=ajson['openid']

#这里返回的是一个json字典,所以可以通过json模块解析其中的信息,以获得openid

#一下是一个例子,用来获取用户的基本信息

url3="https://graph.qq.com/user/get_user_info?"+\"access_token="+access_token+\"&oauth_consumer_key="+client_id+\"&openid="+openid

req3=urllib2.Request(url3)

response3=urllib2.urlopen(req3)#data_dic=json.loads(response3.read())

print (response3.read()).encode('GB2312')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux boot分区有什么用,/ boot分区的真正作用是什么?

射门很难引导...好吧...这确实是最难的部分。每次启动计算机时,它基本上都会重新适应。它熟悉其各个部分,并且满足每个部分都具有功能。但可以说,它每次都要从自己的引导程序中拉起自己。在设计启动过程时,技巧是逐步启动计算机。…

内存颗粒位宽和容量_64M的SDRAM颗粒 一般内存是多大的?

内存颗粒识别存储颗粒主要有这样的一些品牌:美国的Micron(美光)、德国的Infineon(英飞凌);韩国的SAMSUNG(三星)、HY(现代);日本的NEC(日本电气)、Hitachi(日立)、Mitsubishi(三菱)、Toshiba(东芝);台湾的EilteMT、ESMT(晶豪)、Etr…

linux ios开发环境,iOS开发环境搭建(Linux版)

iOS开发环境搭建(Linux版)2015-05-11 13:26:503057浏览必须申明的是,我们强烈建议大家在Mac下学习iOS应用开发,迫不得已才选择Windows和Linux。看到Linux的环境搭建步骤,早已凌乱。1. Ubuntu 10.10 iPhone Toolchain 4If you use Ubuntu 11.0…

pb9数据窗口中显示行数据与当前行区别_Hive的窗口函数

聚合函数(如sum()、avg()、max()等等)是针对定义的行集(组)执行聚集,每组只返回一个值。窗口函数也是针对定义的行集(组)执行聚集,可为每组返回多个值。如既要显示聚集前的数据,又要…

linux下shell脚本论文,Linux下Shell脚本编程

1、 shell脚本是什么它是一种脚本语言,并非编程语言。可以使用一些逻辑判断、循环等语法。可以自定义子函数,是系统命令的集合。shell脚本可以实现自动化运维,大大增加我们的工作效率。2、shell脚本结构以及执行方法开头行指定bash路径: #! /…

大数据 就业 缺口_大数据就业前景广阔,大数据人才紧缺,岗位缺口大

结果显示,绝大部分程序员年龄都不到35岁。超过一半的程序员年龄在23-30岁之间。当然程序员中间的“天才少年”的比例也不低。(三)程序员性别比例一直以来,程序员这一群体主要是男性为主。在本次调查中发现,程序员群体中男女比例超过了12:1。如…

linux硬盘磁盘标识符 0,Linux 磁盘与文件系统管理

Linux 磁盘与文件系统管理一 linux 磁盘(一)磁盘相关知识简介Linux 下用来存储数据的设备有:内存(RAM)与硬盘(Disk)两种;内存访问速度快,但价格昂贵;硬盘价格便宜,但访问速度慢目前市场上常见的磁盘有硬盘(Hard Disk,HD),软盘(Floppy Disk,FD),光盘(CompactDisk,CD),磁带(Tape)…

重构 pdf_三维温度场的重构方法,更准确地监测储能系统的电池堆内部温度

储能系统是微电网的核心组成部分,其热管理对于微电网的安全与稳定具有重要意义。相对于表面温度,电池堆内部温度场更有意义。针对红外热像仪无法监测电池堆内部温度场的问题,浙江工业大学分布式能源与微网研究所、浙江工业大学机械工程学院的…

linux 下停止监听程序,Linux下启动Oracle服务和监听程序步骤

Linux下启动Oracle服务和监听程序启动和关闭步骤整理如下:1、安装oracle;2、创建oracle系统用户;3、/home/oracle下面的.bash_profile添加几个环境变量:ORACLE_SID,ORACLE_BASE,ORACLE_HOME:4、启动步骤:注…

2016 server sql 错误53_MS SQL Server 错误53 错误17是什么?如何解决

展开全部53是安装程序e68a8462616964757a686964616f31333335336532被挂起1、先运行你的安装程序,当提示挂起时,点击“确定”,切记,不要退出安装程序,用ALTTal键切换,点击“开始》运行”,输入“r…

linux找不到光口,以太坊查看命令_求助 输入ifconfig命令 后看不到eth0但是有eth3和eth4-CSDN论坛_区块链百科...

Ⅰ 怎么查看 /etc/sysconfig/network-scripts/ifcfg-eth0在你的这串英文前面加个 cat 空格就行Ⅱ 在linux下如何通过命令查网卡配置在linux下通过命令查网卡配置的方法如下:1、首先在电脑上打开Linux系统,然后进入Linux系统的终端窗口。Ⅲ 为什么用命令e…

开发物体识别桌、_想用人工智能实现安全风险管控?快来试试EasyMonitor一站式视频监控开发平台...

随着 AI 技术的日益成熟,越来越多的传统企业都希望用 AI 能力升级原有的管理系统,进而智能化解决业务问题、提高人效。尤其在安全生产领域中,虽然视频监控的覆盖率逐年提升,但大多企业还在沿用人工抽检的方式对设备、区域、人员进…

linux vim取消显示行号,linux vim不显示行号

Vim是从vi发展而来的文本编辑器,可以用颜色或底线等方式来显示一些特殊的信息。Vim是Linux中必不可少的工具,搭建网站修改配置文件时经常用到。本教程介绍Vim的模式和常用操作。背景信息 Vim的各个模式介绍如下表所示: 模式 作用 模式转换 普…

createprocess重启程序_C++_VC程序设计中CreateProcess用法注意事项,对于windows程序设计来说,启动 - phpStudy...

VC程序设计中CreateProcess用法注意事项对于windows程序设计来说,启动一个进程有三种方法:WinExec,ShellExecute,CreateProcess。这里仅对CreateProcess的用法加以说明。对于CreateProcess的详细参数读者可以查MSDN和《Windows AP…

大学期末c语言作业演示,大学C语言期末考试练习题(带详解答案)

资源描述:一、 单项选择题1. ( A )是构成 C 语言程序的基本单位。A、函数 B、过程 C、子程序 D、子例程2.C 语言程序从 C 开始执行。A 程序中第一条可执行语句 B 程序中第一个函数C 程序中的 main 函数 D 包含文件中的第一个函数3、以下说法中…

linux服务器上svn的log_Linux服务器上搭建svn服务器

背景项目开发中需要版本控制,而我们经常使用的是在windows系统上搭建svn服务器,下面介绍在Linux系统(CentOs)上搭建svn服务器。1. 使用yum安装svn使用yum安装svn,命令如下:yum -y install subversion安装完成之后,验证…

c语言回文字符串原理,回文串(c语言)注意字符串比较和字符比较的区别

#include #include #define LEN 224void judge(char *);int main(void){char ch[LEN];gets(ch);judge(ch);return 0;}void judge(char *ch){int n,i,j;int flag0; //设定一个变化标记nstrlen(ch);char temp[n];for(i0,jn-1;itemp[j--]ch[i]; //注意&#xff1…

pla3d打印材料密度_口腔修复体制作用3D打印金属粉末的成型工艺与性能控制要点概述...

在传统口腔修复体的制作过程中,制作工艺繁琐,制作周期长,加工过程中依赖人力操作,金属材料在制作过程中易发生变形,难以控制尺寸精度,使患者舒适度下降。而采用3D打印技术生产的修复体可根据患者自身进行定…

注释代码c语言,C/C++ 源文件删除注释代码

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include enum {s_normal,s_string,s_string_conv,s_linecomment,s_linecomment_conv,s_comment1,s_comment,s_commented1,s_eof,};int g_state s_normal;int deal(int c) {switch(g_state) {case s_normal:{if (c \") g_st…

iphone11屏比例_iPhone 11屏幕和iPhone X哪个大 iPhone 11和iPhone X屏幕大小对比

目前关于下一代新iPhone X的消息已经疯传网络,至于该机有多么惊艳众说纷纭。近日有iPhone11跑分图流出,下面一起来看看iPhone 11屏幕和iPhone X哪个大。iPhone 11 整体介绍:渲染图中的概念iPhone 11整体的设计风格与iPhone X相似,…