Flask 微博三方登录
1.进入微博开发平台(https://open.weibo.com/),注册账号,填写开发者信息

2.创建应用。创建应用完成后,可以在“我的应用 - 应用信息”中查看您所创建应用的APPKEY及APPSECRET,请妥善保管您的这些信息,这将 成为您调用微博开放平台各API的身份标志,如下图所

weibo.py
#coding:utf-8
# 引导用户授权地址
authorize_url = 'https://api.weibo.com/oauth2/authorize'
#应用 App Key:
client_id = 'App Key'
#应用 App Secret
client_secret = 'App Secret'
#App Key App Secret可在应用的详情信息中找到
#回调地址,线上地址
redirect_uri= 'http://47.107.66.196/bindemail/'
#获取用户access_token地址
access_token_url = 'https://api.weibo.com/oauth2/access_token'
#获取用户信息的 url
info_url = 'https://api.weibo.com/2/users/show.json'
三方登录
1. 引导需要授权的用户到如下地址,进行登陆授权:
<a class="ui circular red big weibo icon button" href="{{ url_for("front.weibo_login") }}">
视图函数:views.py
@bp.route('/weibo_login/')
def weibo_login():
url = weibo.authorize_url+'?client_id={client_id}&redirect_uri={redirect_uri}'\
.format(client_id=weibo.client_id,redirect_uri=weibo.redirect_uri)
return redirect(url)
进入到授权页面:
授权成功,返回回调的地址:redirect_uri
返回数据
| 返回值字段 | 字段类型 | 字段说明 |
|---|---|---|
| code | string | 用于第二步调用oauth2/access_token接口,获取授权后的access token。 |
| state | string | 如果传递参数,会回传该参数。 |
2. 获取授权过的Access Token
URL
https://api.weibo.com/oauth2/access_token
HTTP请求方式
POST
请求参数
| 必选 | 类型及范围 | 说明 | |
|---|---|---|---|
| client_id | true | string | 申请应用时分配的AppKey。 |
| client_secret | true | string | 申请应用时分配的AppSecret。 |
| grant_type | true | string | 请求的类型,填写authorization_code |
grant_type为authorization_code时
| 必选 | 类型及范围 | 说明 | |
|---|---|---|---|
| code | true | string | 调用authorize获得的code值。 |
| redirect_uri | true | string | 回调地址,需需与注册应用里的回调地址一致。 |
我的代码:
@bp.route('/bindemail/',methods=['GET','POST'])
def bindemail():
if request.method == 'GET':
code = request.args.get('code')
if code:
url = weibo.access_token_url + '?client_id={client_id}&client_secret={client_secret}&code={code}&redirect_uri' \
'={redirect_uri}'.format(client_id=weibo.client_id, client_secret=weibo.client_secret,
redirect_uri=weibo.redirect_uri, code=code)
page = requests.post(url)
| 返回值字段 | 字段类型 | 字段说明 |
|---|---|---|
| access_token | string | 用户授权的唯一票据,用于调用微博的开放接口,同时也是第三方应用验证微博用户登录的唯一票据,第三方应用应该用该票据和自己应用内的用户建立唯一影射关系,来识别登录状态,不能使用本返回值里的UID字段来做登录识别。 |
| expires_in | string | access_token的生命周期,单位是秒数。 |
| remind_in | string | access_token的生命周期(该参数即将废弃,开发者请使用expires_in)。 |
| uid | string | 授权用户的UID,本字段只是为了方便开发者,减少一次user/show接口调用而返回的,第三方应用不能用此字段作为用户登录状态的识别,只有access_token才是用户授权的唯一票据。 |
3.获取用户信息
URL
https://api.weibo.com/2/users/show.json
支持格式
JSON
HTTP请求方式
GET
是否需要登录
是
关于登录授权,参见 如何登录授权
访问授权限制
访问级别:普通接口
频次限制:是
关于频次限制,参见 接口访问权限说明
请求参数
| 必选 | 类型及范围 | 说明 | |
|---|---|---|---|
| access_token | true | string | 采用OAuth授权方式为必填参数,OAuth授权后获得。 |
| uid | false | int64 | 需要查询的用户ID。 |
| screen_name | false | string | 需要查询的用户昵称。 |
注意事项
- 参数uid与screen_name二者必选其一,且只能选其一;
- 接口升级后,对未授权本应用的uid,将无法获取其个人简介、认证原因、粉丝数、关注数、微博数及最近一条微博内容
我的代码:
info_data = requests.get(weibo.info_url + '?access_token={access_token}&uid={u_id}'.format(
u_id=uid, access_token=access_token))
infodats = info_data.text
info = json.loads(infodats)
return render_template('front/bind_email.html', ads=ads,info=info,uid=uid)
我的项目bindemail 视图函数代码:
#bindemail 判断用户是否绑定网站邮箱,没有绑定则绑定(相当于第一次登陆,需要绑定邮箱)。绑定了则回到首页
@bp.route('/bindemail/',methods=['GET','POST'])
def bindemail():
if request.method == 'GET':
ads = AdvertisementModel.query.all()
code = request.args.get('code')
if code:
url = weibo.access_token_url + '?client_id={client_id}&client_secret={client_secret}&code={code}&redirect_uri' \
'={redirect_uri}'.format(client_id=weibo.client_id, client_secret=weibo.client_secret,
redirect_uri=weibo.redirect_uri, code=code)
page = requests.post(url)
if page.status_code == 400:
return render_template('front/index.html')
data = page.text
access_token = eval(data)['access_token']
uid = eval(data)['uid']
have_u = FrontUserModel.query.filter_by(weibo_id=uid).first()
session['access_token']=access_token
session['uid']=uid
if have_u:
session[config.FRONT_USER_ID] = have_u.id
return redirect(url_for('front.index'))
if access_token and uid:
info_data = requests.get(weibo.info_url + '?access_token={access_token}&uid={u_id}'.format(
u_id=uid, access_token=access_token))
infodats = info_data.text
info = json.loads(infodats)
return render_template('front/bind_email.html', ads=ads,info=info,uid=uid)
return render_template('front/index.html')
else:
form = BindWeiboForm(request.form)
if form.validate():
email = form.email.data
gender = request.form.get('gender')
uid = request.form.get('uid')
weibo_desc = request.form.get('weibo_desc')
avatar = request.form.get('avatar')
nickname = request.form.get('nickname')
user = FrontUserModel.query.filter_by(email=email).first()
if user:
return restful.params_error(message='此邮箱已经被绑定,请换个邮箱再试~')
u = FrontUserModel(email=email,avatar=avatar,password=' ',nickname=nickname,gender=gender,signature=weibo_desc,weibo_id=uid)
db.session.add(u)
db.session.commit()
session[config.FRONT_USER_ID] = u.id
return restful.success(data=u.id)
else:
return restful.params_error(get_error(form))
三方登录十分简单,调用时注意传入正确参数即可 。QQ登陆,微信登陆的套路都一样。
官方文档:https://open.weibo.com/wiki/Connect/login
如果我的文章有帮到你,欢迎给我的这个网站star https://github.com/1417766861/mycms
Flask 微博三方登录的更多相关文章
- apiClould微信三方登录,qq三方登录
三方登录需要在config.xml文件中配置一下,res文件下需要新建一个key.xml文件中也需要配置,请点击链接查看详情 微信:https://docs.apicloud.com/Client-A ...
- 对QQ、微信等第三方登录的几个思考
转自:http://www.jianshu.com/p/7f282dfc16fc 今天聊聊注册.登录环节中很常见的第三方登录,如QQ.微信.支付宝.新浪微博等.虽然这些产品的开放平台都提供了标准的接入 ...
- CocoaPods的安装及使用/利用开源库Diplomat实现分享及第三方登录/git的使用
<<史上最简洁版本>> 1.gem sources -l查看 当前的源 //1.1 sudo -i..以下都是以管理员的身份来操作的 2.gem sources --remov ...
- Django 2.0.4 微博第三方登录
三方登录逻辑 理解第三方登录的流程: 用户向本地应用商城发起请求,我要用微博进行登录 我们的商城凑一个url让用户跳转到第三方应用的url(微博的登录页面) 用户在该界面点击输入用户名密码之后,点击授 ...
- yii2微博第三方登录
原作者:杜文建 原博客:http://www.cnblogs.com/dwj97/p/6530568.html yii2微博第三方登录 微博登录是最常用的第三方账号登录之一.由于其网站用户量大,可 ...
- tp5集成淘宝,微信,网易,新浪等第三方登录
tp5集成淘宝,微信,网易,新浪等第三方登录 一.总结 一句话总结: 接口 链接 实现的话就是这些平台给的一个接口(链接),你通过这些接口登录进去之后,它会给你返回用户名,头像之类的信息,我们的网站存 ...
- Unity利用Share SDK实现QQ、微信及微博第三方登录及定制内容分享(附代码)
最近因为公司的项目需要添加一些实用性的功能,需要添加第三方登录及分享,采用的是Mob的SDK,可以先到其官网下载对应的SDK 点击这里,为了方便后期进行数据统计和分析,所以可以先添加一个应用,添加成功 ...
- PHP实现qq三方登录
除了qq第三方登录外.还有微博,微信等第三方登录 qq第三方登录,遵循oauth2.0协议 这里是说明http://www.cnblogs.com/yx520zhao/p/6616686.html q ...
- 使用Python3.7+Tornado5.1集成新浪微博三方登录(无需企业资质)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_137 新浪微博:山寨版的twitter,各种粉丝的集散地,天朝人民的最爱,基本上网民都人手一个微博账号,所以使用新浪微博账号进行三 ...
随机推荐
- 牛客训练二:处女座的签到题(STL+精度+三角形求面积公式)
题目链接:传送门 知识点: (1)三个点,三角形求面积公式 (2)精度问题: double 15-16位(参考文章) float 6-7位 long long 约20位 int 约10位 unsign ...
- 华为机试-iNOC产品部-杨辉三角的变形
题目描述 1 1 1 1 1 2 3 2 1 1 3 6 7 6 3 11 4 10 16 19 16 10 4 1以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数,左上角数 ...
- 添加网络ADB的方法(含以太网和无线)
将下面代码添加至packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java 结合之前的添加wifi adb的博客 ...
- 实现两个sym转一个sym
CVO输出如果是一个像素并行输出,选择内嵌人插入同步码.如果两个像素并行输出是不能选择内嵌的,只能选择分离的方式.如果把输出的并行数据给VIP并且要求是内嵌,那只能在内部转或者外部转. 这里是实现外部 ...
- 归并排序 JavaScript 实现
前文我们了解了快速排序算法的实现,本文我们来了解下另一种流行的排序算法-归并排序算法. 我们先来回顾下快排.快排的核心是找出一个基准元素,把数组中比该元素小的放到左边数组,比该元素大的放到右边数组,如 ...
- 通过pip安装套件
pip3 install requests pip3 install BeautifulSoup4 还需要使用jupyter: pip3 install jupyter 打开jupyterbook ...
- property属性[Python]
一.property解释 根据文档资料解释: property([fget[, fset[, fdel[, doc]]]]) Return a property attribute for new-s ...
- 关于Lambda
1. 查询时,包含关联子对象.如: 数据库中包含表Father和Son,映射实体如下: public class Father { public string Name{get;set;} publi ...
- hdu 4901 划分序列使异或和==且和
http://acm.hdu.edu.cn/showproblem.php?pid=4901 给定一个序列,要求选出两个集合,S和T,要求S中选中的元素的下标都要小于T中元素的下标.并且说S中元素的异 ...
- Android-多线程安全问题-synchronized
先看一个售票案例Demo,多线程程序对共享数据操作引发的安全问题: package android.java.thread09; /** * 售票线程 */ class Booking impleme ...
