1.微博回调接口 和绑定user接口
1.1 oauth/views.py 中添加试图函数
http://192.168.56.100:8888/oauth/weibo/callback/
# 通过vue前端传入的code,微博身份验证
class OauthWeiboCallback(APIView):
permission_classes = (AllowAny,)
def post(self,request):
code=request.data.get('code')
data={
'client_id': '4164371007', # 创建的应用测试id
'client_secret': 'd4fe5c2583f36b379d786a8f8ce56b8b', # 信息
'grant_type': 'authorization_code',
'code': code,
'redirect_uri': 'http://127.0.0.1:8888/oauth/callback/',
}
url = 'https://api.weibo.com/oauth2/access_token'
data = requests.post(url=url, data=data).json() # 拿取请求的返回结果
access_token = data.get('uid') # 获取到的微博token
weibo_uid = data.get('access_token') # 获取到少码用户的id
try:
oauth_user = OauthUser.objects.get(uid=weibo_uid, oauth_type='1')
except Exception as e:
oauth_user = None
# 返回动作, 登录成功/需要绑定用户 type 0 登录成功, 1, 授权成功, 需要绑定
if oauth_user:
# 4. 如果绑定了, 返回token, 登录成功
user = oauth_user.user
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
# jwt_response_payload_handler为user模块定义的jwt返回的信息
data = jwt_response_payload_handler(token, user)
data['type'] = '0' # 指定为登录成功
return Response({'code': 0, 'msg': '登录成功', 'data': data})
else:
# 5. 如果没绑定, 返回标志, 让前端跳转到绑定页面
return Response({'code': 0, 'msg': '授权成功', 'data': {'type': '1','uid': weibo_uid}})
1.1 oauth/urls.py 中添加路由
urlpatterns = [
path('weibo/callback/', views.OauthWeiboCallback.as_view()), # 回调
/oauth/weibo/callback/
]
绑定用户
1.1oauth/models.py 中添加用户绑定模型
class OauthUser(models.Model):
OAUTHTYPE = (
('1', 'weibo'),
('2', 'weixin'),
)
uid = models.CharField('三方用户id', max_length=64)
# 三方用户id
user = models.ForeignKey('user.User', on_delete=models.CASCADE)
# 本地用户外键,关联User表
oauth_type = models.CharField('认证类型', max_length=10, choices=OAUTHTYPE)
1.2 迁移数据库
python manager.py makemigrations
python manager.py migrate
1.3 oauth/views.py 中添加试图函数
class OauthWeiboBindUser(APIView):
permission_classes = (AllowAny,)
def post(self,request):
username=request.data.get('username')
password=request.data.get('password')
weibo_uid=request.data.get('weibo_uid')
print(username,password,weibo_uid)
if not all([username,password,weibo_uid]):
return Response({'code':999,'msg':'参数不全'})
try:
user=User.objects.filter(username=username).first()
except Exception as e:
user=None
if user:
print(password, user.password,'11111')
if user.check_password(password):
ou=OauthUser(uid=weibo_uid,user=user,oauth_type='1')
ou.save()
payload=jwt_payload_handler(user)
tokon=jwt_encode_handler(payload)
data=jwt_response_payload_handler(tokon,user)
data['type'] = '0' # 指定为登录成功
return Response({'code': 0, 'msg': '登录成功', 'data': data})
else:
return Response({'code': 999, 'msg': '密码错误'})
else:
# 2. 未注册用户
# 2.1 生成新用户, 设置用户名密码, 保存, 然后绑定, 返回token, 登录成功
user = User(username=username)
user.set_password(password)
user.save()
ou = OauthUser(uid=weibo_uid, user=user, oauth_type='1')
ou.save()
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
data = jwt_response_payload_handler(token, user)
data['type'] ='0' #指定为登录成功
return Response({'code':0,'msg':'登录成功','data':data})
1.4 oauth/urls.py 中添加路由
urlpatterns = [
path('weibo/binduser/', views.OauthWeiboBindUser.as_view()), # ]
1.微博回调接口 和绑定user接口的更多相关文章
- vue微博回调接口
1.vue微博回调空页面 注:微博回调空页面为: http://127.0.0.1:8888/oauth/callback/ 1.1 页面路径 components\oauth.vue <tem ...
- 接口的绑定方案和动态SQL
1. 接口绑定方案 MyBatis中, 提供了一套接口绑定方案. 程序员可以提供一个接口, 然后提供对应接口的一个mapper.xml文件. MyBatis会自动将接口和xml文件进行绑定. 实际上就 ...
- vue微博回调空页面
1.vue微博回调空页面 注:微博回调空页面为:http://127.0.0.1:8888/oauth/callback/ 1.1 页面路径 components\oauth.vue <temp ...
- 如何把 Callback 接口包装成 Promise 接口
最近一段时间一直在看Node.js,在开发过程中经常要调用一些异步接口,通常在接口的最后一个参数会传入一个回调函数,可以用来处理异常,非异常情况.大致模式如下: var fs = require(“f ...
- QQ登录接口(第三方登录接口)
CI框架 QQ接口(第三方登录接口PHP版) 本帖内容较多,大部分都是源码,要修改的地方只有一个,其他只要复制过去,就可以完美运行.本帖主要针对CI框架,不用下载SDK,按我下面的步骤,建文件,复制代 ...
- java基础2.-------interface接口类,实现接口
1.为什么使用接口,是把功能方法都写在一个类中,在其他需要调用的时候,通过implements实现该接口 2.接口可以继承多个父类接口,在实现接口的时候,实现类实现所有方法 3.在接口类写方法时,自动 ...
- 【linux草鞋应用编程系列】_1_ 开篇_系统调用IO接口与标准IO接口
最近学习linux系统下的应用编程,参考书籍是那本称为神书的<Unix环境高级编程>,个人感觉神书不是写给草鞋看的,而是 写给大神看的,如果没有一定的基础那么看这本书可能会感到有些头重脚轻 ...
- 转】C#接口-显式接口和隐式接口的实现
[转]C#接口-显式接口和隐式接口的实现 C#中对于接口的实现方式有隐式接口和显式接口两种: 类和接口都能调用到,事实上这就是“隐式接口实现”. 那么“显示接口实现”是神马模样呢? interface ...
- java中接口的定义和接口的实现
1.接口的定义 使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下: [修饰符] interfa ...
随机推荐
- 【开源】.net微服务开发引擎Anno开源啦
1.Anno是什么? Anno是一个微服务框架引擎.入门简单.安全.稳定.高可用.全平台可监控.依赖第三方框架少.底层通讯RPC(Remote Procedure Call)采用稳定可靠经过无数成功项 ...
- 原生sql查询返回结果集处理方法
今天博主用原生写查询的时候发现,查询出来的居然不是我数据表里的数据,而是一个对象 object(mysqli_result)#2 (5) { ["current_field"]=& ...
- swlib
Swoole人性化组件库 ~ Swoole Humanization Component Library
- 粉丝少的UP主如何赚大钱
常逛B站的小伙伴应该知道,B站官方经常会推出各类征稿活动,奖金池也非常高,少则几万,多则上百万,可以说非常受UP主们的欢迎. 图1:B站各类活动 要知道,除了少数头部UP主可能因为没(有)有(钱)看( ...
- 如何用FL Studio做电音
电音制作,自然少不了适合做电音的软件,市面上可以进行电音制作的软件不少,可是如果在这些软件中只能选择一款的话,想必多数人会把票投给FL Studio,毕竟高效率是永远不变的真理,今天就让我们来看看如何 ...
- js 时间日期与时间戳之间转换
1 1.将时间(2017-08-10)转换时间戳 2 var startTime = '2017-08-10'; 3 var startdate = new Date(Date.parse(start ...
- iOS 索引列 使用详解
做苹果开发的朋友在地区列表可能会遇到在页面的右侧有一列类似与导航的索引列,这次有机会遇到了,细细研究了一下,原来没有想象中的高达上,只需要简单的几步就能做出自己的索引列.,关注我的博客的朋友可能会对这 ...
- 写给程序员的机器学习入门 (九) - 对象识别 RCNN 与 Fast-RCNN
因为这几个月饭店生意恢复,加上研究 Faster-RCNN 用掉了很多时间,就没有更新博客了.这篇开始会介绍对象识别的模型与实现方法,首先会介绍最简单的 RCNN 与 Fast-RCNN 模型,下一篇 ...
- 测试:ADB
配置 JAVA: 1.安装jdk的按抓包(傻瓜式安装不需要更改路径) 2.我的电脑右击属性--高级系统设置--环境变量--用户变量--新建:JAVA_HOME C:\Program Files\Jav ...
- 图解连接阿里云(一)创建阿里云物联网平台产品和设备,使用MQTT.fx快速体验
1. 打开 https://www.aliyun.com/ 注册账号 2.注册账号登录后点击控制台 3. 在下图1处输入物联网平台,会弹出2处所示物联网平台的入口,点击红色箭头所示处,进入物联网平 ...