python 抖音第三方登录_前后端分离抖音第三方授权登录
现在我做的项目需要支持使用抖音账号登录,并且可以管理自己的抖音号,所以我需要拿到抖音用户的身份验证 access_token,这篇文章记录一下抖音授权登录的流程。
抖音开放平台提供了授权相关的接口和文档说明,大概流程是:
1.用户在我们应用选择抖音登录,前端向后端发起一个 GET 请求,包含stat参数,我给前端返回一个获取授权码的网址。
2.用户访问获取授权码的网址,用抖音扫码或者输入抖音账号密码,进行授权登录
3.用户授权成功之后,抖音会回调我配置的回调 redirect_uri,传回 code 和 stat 参数
4.后端回调函数会用 code等参数请求抖音,得到用户的access_token 和 open_id.
5.后端把用户的 open_id 和 stat参数保存到数据库中,access_token 保存到redis 中
6.后端根据用户信息生成一个用户 token,自己项目的用户认证token,用户open_id 和 token作为 key-value 保存到 redis 中。
7.前端对后端的登录接口进行轮询,传递 stat参数,如果用户表中有 stat 则返回用户的 token。
有了用户的 access_token 和 open_id 就可以操作用户自己的抖音了,包括用户信息,用户的短视频管理等。
下面是代码:
class V1PlatformCodeView(APIView):def get(self, request):"""返回请求抖音授权的页面url:param request::return:"""# uuid 之类的(不允许重复)state = request.query_params.get('state')client_key = settings.CLIENT_KEYredirect_uri = settings.HOST_IP + "v1/user/platform_redirect/"response_type = "code"scope = "user_info,fans.list,following.list,video.create,video.list,video.data,aweme.share,video.delete"url = "https://open.douyin.com/platform/oauth/connect/" \"?client_key={}&response_type={}&scope={}&redirect_uri={}&state={}".format(client_key, response_type,scope,redirect_uri, state)res = {"url": url}return Response(data=res)class V1PlatformRedirectView(APIView):def get(self, request):"""获取access_token:param request::return:"""code = request.query_params.get('code')stat = request.query_params.get('stat')client_key = settings.CLIENT_KEYclient_secret = settings.CLIENT_SECRETgrant_type = "authorization_code"url = "https://open.douyin.com/platform/oauth/connect/oauth/access_token/" \"?client_key={}&client_secret={}&code={}&grant_type={}".format(client_key, client_secret, code,grant_type)r = requests.get(url=url)response = r.json().get("data", {})print("v1/user/platform_redirect/::response", response)open_id = response.get("open_id")expires_in = response.get("expires_in")access_token = response.get("access_token")refresh_token = response.get("refresh_token")# 保存用户的access_token到redisset_authorizer_access_token_to_redis(open_id=open_id, authorizer_access_token=access_token,expires_in=expires_in)# 保存用户的refresh_token到redisset_authorizer_refresh_token_to_redis(open_id=open_id, authorizer_refresh_token=refresh_token)# 判断openid是否存在,存在则更新stat的值,不存在就创建user = BaseUser.objects.update_or_create(defaults={"stat": stat}, open_id=open_id)# 设置 stat 过期时间set_stat_to_redis(stat, expires_in=300)return Response(data={"res": response})class V1DouYinLoginView(APIView):def post(self, request):"""使用抖音账号登录:param request::return:"""stat = request.data.get('stat')# 获取stat过期时间expires_in = from_redis_get_stat(stat)if expires_in < 0:return Response(data={"error": "stat已过期"}, status=status.HTTP_400_BAD_REQUEST)user = BaseUser.objects.filter(stat=stat)if not user.exists():return Response(data={"error": "该用户不存在"}, status=status.HTTP_400_BAD_REQUEST)jwt_token = encode_user_token(user)user_id = user.idopen_id = user.open_idmobile = user.mobileres = {"jwt_token": jwt_token,"id": user_id,"open_id": open_id,"mobile": mobile}return Response(data=res)
参考文档:
https://open.douyin.com/platform/doc/OpenAPI-oauth2
https://blog.csdn.net/I_lost/article/details/104520655
python 抖音第三方登录_前后端分离抖音第三方授权登录相关推荐
- python安装环境傻瓜式安装_前后端分离——前端开发环境傻瓜式一步到位 nodejs ruby python nginx 安装搭建配置...
前端开发环境一步到位 一.准备工作 nodejs安装 安装:next->next.... Ruby安装 安装:next->next.... 需要配置到path:将安装目录复制到环境变量中, ...
- python后端开发的缺点_前后端分离优缺点
前后端分离优缺点 之前有朋友问我:什么是前后端分离.他说北度搜到的都是大篇幅文章,看完还是很懵. 这里我简单总结下,如果有疏漏和不对的地方还请路过的网友指出. 一.先用一张图来解释 二.为什么要前后端 ...
- 若依前后端分离如何写移动端接口_前后端分离实践的架构设计
前后端分离的项目开发策略已经不是什么新鲜东西了,网上介绍这方面的文章非常多.我自己是在14年的时候接触到的,对这种开发策略一直爱不释手,不管新老项目都会首先用前后端分离的思维先去思考一番.从14年到现 ...
- 若依前后端分离如何写移动端接口_前后端分离后,如何定义接口规范~
小Hub领读: 前后端分离的趋势下,该怎么定义规范,来学习学习吧哈! 作者:猿码架构 www.jianshu.com/p/c81008b68350 1. 前言 随着互联网的高速发展,前端页面的展示.交 ...
- 你需要来自trustedinstaller的权限才能删除_前后端分离后的权限控制设计方案
近几年随着react.angular.vue等前端框架兴起,前后端分离的架构迅速流行.但同时权限控制也带来了问题.网上很多前.后端分离权限仅仅都仅仅在描述前端权限控制.且是较简单.固定的角色场景,满足 ...
- cors 前后端分离跨域问题_前后端分离之CORS跨域访问踩坑总结
前言 前后端分离的开发模式越来越流行,目前绝大多数的公司与项目都采取这种方式来开发,它的好处是前端可以只专注于页面实现,而后端则主要负责接口开发,前后端分工明确,彼此职责分离,不再高度耦合,但是由于这 ...
- 前后端分离项目如何部署_前后端分离项目,如何解决跨域问题?
跨域资源共享(CORS)是前后端分离项目很常见的问题,本文主要介绍当SpringBoot应用整合SpringSecurity以后如何解决该问题. 01 什么是跨域问题? CORS全称Cross-Ori ...
- thinkphp后台_前后端分离决方案|thinkphpvueadmin 后台接口
thinkphp-vue-admin 后台接口 |前后端分离决方案 它一套有thinkphp开发集成性后台接口,内置权限管理,api响应,psysh等多功能工具 他的作用 自带登录校验 快速完成数据格 ...
- 若依前后端分离框架学习-2:登录过程
上一篇写了下若依前后端分离框架中前端至弹出登陆界面的过程,本片来详细了解下登录的整个过程. 后端包含ruoyi-admin,ruoyi-common,ruoyi-framework等多个模块, ...
最新文章
- SAP WM LPK1 不能把 cross-material control cycles定义成release order parts
- android:background=@color/white [create file color.xml at res/values/]
- Kafka消费者APi
- oracle中偏移,怎么对相同的坐标点偏移?
- 计算机网络抓包参考文献,计算机网络课程设计二(网络抓包与分析)
- dom4j工具类_基于DOM4J的XML文件解析类
- Linux下more命令C语言实现实践 (Unix-Linux编程实践教程)
- mysql 堆表_Mysql聚集索引和非聚集索引(堆组织表和索引组织表)
- c语言有结构体的200行代码,C语言——结构体(示例代码)
- [label][paypal] Paypal 支付页面的语言显示问题
- 谭浩强C语言程序设计第五版第七章例题
- mysql jdbc 5.6_mysql5.6 jdbc驱动官网下载|
- 活动目录备份和灾难恢复之手动备份与非授权还原
- 球的体积并(计算几何+球缺)
- 保姆级教学!Xcode 配置 OpenGL 环境
- 移动信号e经常无服务器,手机信号从4G变成E,是什么情况?移动客服作出解答...
- 自动化运维 -- 02 Ansible
- 基于python实现crc16 ccitt的校验和
- CN_以太网规格和传输介质@双绞线@基带同轴电缆
- oracle失效对象是什么意思,Oracle中无效数据库对象的处理方法
热门文章
- 基于Python的图像分类 项目实践——图像分类项目
- MAC重置密码时,使用Apple ID登录时 下发显示红字“连接到Apple ID”且点击下一步无反应
- [Mattermost]安装Docker版
- 小程序如何解决文件缓存问题?
- 深度优先搜索实现抓牛问题
- ggplot2的分面标签和坐标轴位置
- ping服务器地址加时间显示,如何对IP地址进行Ping测试
- office套件_OfficeSuite v4.9免费专业Office办公套件
- 刚找到的OFFICESUITE V3.00注册码
- [C/C++]getchar的陷阱