完整电商项目--(四)用户登录(4):第三方登录-QQ登录(续,关联网站账号)

第三方账号登录表设计 在项目刚开始的时候User 表结构可能是 这样的 {user_id,user_name,login_account,login_password} 登录使用账号密码 {login_account,login_password}, login_account 可能是 phone 或者 email 中的一种。 这里假设项目一开始 账号都是手机号。 user表: user_id u... 阅读详情

上一节已经讲过了如何利用第三方QQ登录。下面讲下 绑定 网站账号的操作。

(1)创建QQ模型类

  • 我们只需要有两个字段
  • user:用来关联 网站账号
  • openid: QQ用户的唯一身份认证信息,相当于身份证。用来调用 openAPI接口,实现业务。
class OAuthQQUser(BaseModel):
    """QQ登陆用户数据"""
    user = models.ForeignKey('users.User', on_delete=models.CASCADE, verbose_name='用户')
    openid = models.CharField(max_length=64, verbose_name='openid', db_index=True)

    class Meta:
        db_table = 'tb_oauth_qq'
        verbose_name = 'QQ登陆用户数据'
        verbose_name_plural = verbose_name

具体接口业务流程:

  • 首先我们使用一个 python封装好的包, 我们上节讲过,SDK只有 php和 js的,但是我们python就是包多,库多,大牛多呀~ 下面就导入一个 包,用来完成上节讲的 获取用户授权码等等的业务。
  • (1)安装
pip install QQLoginTool
  • (2)使用
    (1)导入
from QQLoginTool.QQtool import OAuthQQ

(2)初始化OAuthQQ对象

  • 这个很好理解,我们上节看文档中的操作,都需要使用到 应用的id,key,和回调地址,所以封装了一个对象,初始化这三个属性
oauth = OAuthQQ(client_id=settings.QQ_CLIENT_ID,
 client_secret=settings.QQ_CLIENT_SECRET,
  redirect_uri=settings.QQ_REDIRECT_URI, state=next
  )

(3)获取QQ登录扫码页面(就是访问此链接可以获取 code,用户授权码),扫码后得到Authorization Code

login_url = oauth.get_qq_url()

(4)通过Authorization Code获取Access Token

access_token = oauth.get_access_token(code)

(5)通过Access Token获取OpenID

openid = oauth.get_open_id(access_token)

  • 这些就是基本的需要了,很方便。当然内部实现也不复杂,应该是使用了,requests或者 urllib 去发送请求获取这些。

下面就是视图了

  • (1)视图一
    • 我们要做的就是返回 获取 code(用户授权码)的链接
# 获取授权 认证码 code
class OAuthQQURLView(View):
    def get(self, request):
        # 创建授权对象
        oauthqq = OAuthQQ(
            settings.QQ_CLIENT_ID,
            settings.QQ_CLIENT_SECRET,
            settings.QQ_REDIRECT_URI,
            request.GET.get('next')
        )

        # 生成授权地址
        login_url=oauthqq.get_qq_url()

        # 响应
        return http.JsonResponse({
            'code': RETCODE.OK,
            'errmsg':"ok",
            'login_url':login_url
        })

  • (2)视图二
    • (1)get方法
      • 首先这个视图是 请求服务器回调请求我们的
      • 先获取code值
      • 获取 state字段:表示跳转界面
      • 再从code值 ,访问得到 token
      • 通过token获取 oponid
      • 进行判断:
        • 查询数据库,当存在改QQ对象,则跳转页面
        • 若不存在,则是第一次授权,我们挑战到 绑定页面,使该QQ号与 我们网站的账号绑定
class OAuthQQOpenidView(View):
    def get(self, request):
        # 用户授权码
        code = request.GET.get('code')
        # 获取后面的 state跳转界面
        state = request.GET.get('state','/') # 默认值: /

        # 创建授权对象
        oauthqq = OAuthQQ(
            settings.QQ_CLIENT_ID,
            settings.QQ_CLIENT_SECRET,
            settings.QQ_REDIRECT_URI,
            state
        )

        # 根据code获取token
        token = oauthqq.get_access_token(code)

        # 获取openid
        openid = oauthqq.get_open_id(token)

        # 判断是否初次授权
        try:
            qquser = OAuthQQUser.objects.get(openid=openid)
        except:
            # 未查到数据,则为初次授权,显示绑定页面
            # 将openi加密
            json_str = meiduo_signature.dumps({"openid": openid}, constants.OPENID_EXPIRES)            # 显示绑定页面
            context = {
                'token': json_str
            }
            return render(request, 'oauth_callback.html', context)
        else:
            # 查询到授权对象,则状态保持,转到相关页面
            # 得到用户的user对象
            user = qquser.user
            login(request, user)

            response = redirect(state)
            response.set_cookie('username', user.username)
            return response
    • post请求: 用来处理上面提到的第一次 绑定中传来的信息。
      • 接收:openid,mobile,password,sms_code,重定向地址
    # 接受 初次授权数据,进行处理
    def post(self, request):
        # 接收:openid,mobile,password,sms_code
        access_token = request.POST.get('access_token')
        mobile = request.POST.get('mobile')
        pwd = request.POST.get('pwd')
        sms_code = request.POST.get('sms_code')
        # 接受重定向地址
        state = request.GET.get('state', '/')

        # 验证:参考注册的验证
        openid_dict = meiduo_signature.loads(access_token, constants.OPENID_EXPIRES)
        if openid_dict is None:
            return http.HttpResponseForbidden('授权信息无效,请重新授权')
        # 将openid从加密之后的字典中取出来
        openid = openid_dict.get('openid')

        # 处理:初次授权,完成openid与user的绑定
        # 1.判断手机号是否已经使用
        try:
            user = User.objects.get(mobile=mobile)
        except:
            # 2.如果未使用,则新建用户
            user = User.objects.create_user(mobile, password=pwd, mobile=mobile)
        else:
            # 3.如果已经使用,则验证密码
            # 3.1密码正确
            # 3.2密码错误,则提示
            if not user.check_password(pwd):

                return http.HttpResponseForbidden('手机号已经使用,或密码错误')
        # 4.绑定:新建OAuthQQUser对象
        qquser = OAuthQQUser.objects.create(
            user=user,
            openid=openid
        )
        # 状态保持
        login(request, user)
        response = redirect(state)
        response.set_cookie('username', user.username)
        # 响应
        return response

  • 其中涉及到加密和机密的操作,这个等下节再讲一下。主要是为了安全,防止别人恶意伪造数据,访问接口。

另外要说的是:
上面这个逻辑没有涉及到 当一个手机号已经成功绑定了一个qq号,
但是绑定新的qq号时,手机号和密码都正确,
那么也会绑定成功,
也就是说上面代码的这段逻辑,支持多个qq号绑定一个 注册用户,逻辑上面感觉没有问题的。

  • 还有就是我们只是登录业务,其实并没有使用到 后面的 token,openid,我觉得也可以自己构建一个独有的 序列代替openid,但是为了后续业务的扩展,openid当然是最好的,可以调用QQ的业务。
注意:另外不能迷的是,一定要搞清楚,浏览器,QQ服务端,django的关系。 我们在QQ授权登录,扫码或者点击登录之后,此时只是获取到 code(用户授权码)剩下的业务全都是由django做的。 比如扫完码跳转到首页,这些都是django做的。code获取后回调 到django。

步骤:
在这里插入图片描述
点击QQ图标,此链接是 访问Django,获取 可以得到code的链接
在这里插入图片描述
注意这些参数,就是 获取code的 链接了,中途腾讯方面需要进行身份验证,需要QQ登录授权。

下面:扫码之后,直接回到网站首页,这中间的步骤全部是django做的,因为QQ的回调地址是 django端,后续获取code,获取 token,获取openid,以及绑定用户,挑战到首页。都是django做的。

接到这里吧!
over!

超详细Python教程——电商网站技术要点剖析 第三方登录是指利用第三方网站(通常是知名社交网站)的账号进行登录验证(主要是通过知名第三方网站获取到用户相关信息),比如国内的 QQ、微博,国外的Google、Facebook等。第三方登录大部分都是使用。静态资源的管理可以自己架设文件服务器或者分布式文件服务器(FastDFS),但是一般的项目中没有必要这样做而且效果未必是最好的,我们建议使用云存储服务来管理网站的静态资源,国内外的云服务提供商如。等都提供了非常优质的云存储服务,而且价格也是一般公司可以接受的,具体的操作可以参考官方文档,例如:阿里云的。 阅读详情

相关推荐

易语言QQ网页POST登陆

易语言QQ网页POST登陆源码系统结构:取自动验证码,密码到MD5,后台登录QQ,取文本中间内容, ======窗口程序集1 || ||------__启动窗口_创建完毕 || ||------取自动验证码 || ||------密码到MD5 || ||---

数据库表设计:基于业务场景的用户表的设计

本站系统的用户登录设计 通常作为本站系统的登录,有三种设计方式: 用户名+密码 邮箱+密码 手机号+密码 那么该如何设计登录方式呢? 1.三种登录方式,功能是否重复?是否可以只实现其中一种? 功能并不重复。看情况实现。 理由如下: 网站还是需要用户名,用于区别内部用户。 当提及某个用户时,邮箱和手机号,用户可能不想公开。而提及昵称时,昵称可以重复,不能作区分。 用户名一旦选定不允许更改,邮箱和手机号作为第三方的系统,应该允许更改。 2.什么时候可以只用邮箱或手机进行登录? 邮箱或手机号是唯一的,但

晓风残月淡的博客 1万+

Unity Android构建报错:compileSdk 35兼容性五层定位法

Android构建中的compileSdk是编译时API目标版本,其升级并非孤立操作,而是触发JDK、Android Gradle Plugin(AGP)、NDK、targetSdk与Unity引擎版本之间强耦合校验的起点。当出现'using a newer Android Gradle plugin to use compileSdk = 35'类报错,本质是代际技术栈错配——例如AGP 7.1.3不识别compileSdk 35所需Java 17语法,或NDK 21与AGP 7.4的ABI规范冲突。该问

weixin_32496547的博客 566

如何设计 QQ、微信、微博、Github 等等,第三方账号登陆 ?(附表设计)

点击上方“Java基基”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏原创 | Java 2020超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析...

weixin_44421461的博客 344

Upload Symbols Failed:The archive did not include a dSYM for the LiveKitWebRTC.framework with the UU

你需要从源码构建 LiveKitWebRTC,而不是使用 CocoaPods 安装的预编译 .xcframework。Step 2: 修改 Podfile 使用本地路径引用(不是从源下载的 xcframework)方法 :强制从源码构建 LiveKitWebRTC.framework(推荐)这样它就会编译 WebRTC 并带上正确 UUID 的 dSYM。替换路径为你 clone 下来的 LiveKit 源码位置。Step 1: 克隆源码仓库。

baidu_40537062的博客 2131

ArcGIS Pro 拓扑编辑实战:从‘地图拓扑’到‘共享编辑’,手把手教你批量修改要素

本文详细介绍了ArcGIS Pro中的拓扑编辑功能,从地图拓扑配置到共享编辑技巧,手把手教你如何批量修改要素。通过实战案例展示拓扑编辑在城市规划、地籍管理等场景中的应用,显著提升编辑效率并减少拓扑错误,是现代GIS技术的重要生产力工具。

weixin_30500473的博客 505

第三方登录之数据库设计

第三登录之数据库设计现在很多网站和应用都会接入第三方登录来减少用户注册,即方便又快捷。比如说qq登录,微信,新浪微博等方式。关于第三方登录数据库设计,涉及到2张表的设计,一张用户基本信息表,用于存储用户的基本资料(头像,昵称,性别等基本信息),用户oauth表(用户id,登录方式,第三方唯一ID...

qq_28952577的博客 1万+

Eplan设计师必会—伺服安全回路的设计方法

本文介绍了在EPLAN中设计伺服STO安全回路的方法。首先需查阅伺服驱动器说明书确定STO接线端子,重点关注双通道配置。设计步骤包括:使用黑盒子功能绘制驱动器外形,正确标注STO接线点,并连接安全继电器或PLC的安全输出。关键注意事项有:必须采用双通道独立布线,确保同步动作,遵循故障安全原则,使用常闭触点串联回路。文中以西门子V90和汇川伺服为例说明具体接线要求,并附有项目实例参考。

Qinmingyue13的博客 436

数据库表设计3:微信、QQ第三方多账号登陆

前言:相比于本地注册,第三方登录一般来说比较方便快捷。因为显著降低了用户的注册或登录成本,从而减少由于本地注册的繁琐性而带来的隐形用户流失,最终提高注册转化率。 1. 什么是第三方登录 所谓的第三方登录,是说基于用户在第三方平台上已有的账号和密码来快速完成己方应用的登录或者注册的功能。而这里的第三方平台,一般是已经拥有大量用户的平台,国外的比如Facebook,Twitter等,国内的比如微博、微信、QQ等。 使用第三方登录后,要求用户补充一些信息(手机号、邮箱等等),如果用户信息已存在,则直接绑

何哥的博客 1万+

ESD防护设计宝典(二十三):ESD与EOS失效差异分析

ESD和EOS是电子制造业面临的两大挑战,随着电子产品向更高集成度、更低工作电压和更高工作频率发展,这一问题将更加突出。根据美国军方上世纪八十年代与可靠性分析中心(RAC)共同建立的现场失效返回程序(FFRP)统计数据,产品现场返回中EOS占比高达46%,而ESD仅占6%,另有6%的案例难以区分是EOS还是ESD。

m0_56451176的博客 320

YOLO26 实例分割技术:Mask 分支与特征融合

YOLO26实例分割技术研究摘要:本文提出了一种基于YOLO架构的高效实例分割方法,通过创新设计Mask分支和特征融合策略解决像素级分割精度、多尺度目标处理等挑战。系统采用共享Backbone提取特征,检测分支输出边界框和类别,Mask分支生成原型Mask和组合系数。核心创新包括:1)原型Mask生成与线性组合机制;2)检测与Mask特征共享;3)结合BCE和Dice的多任务损失函数。实验表明该方法在保持实时性的同时实现了高质量分割,为轻量级实例分割提供了新思路。

一键难忘的博客 248

完整电商项目--(四)用户登录(3):第三方登录-QQ登录

1

pythonstrat的博客 788

一篇把 Transport 做到可复制的实战指南:从 CTS 底层表到 LSMW、Variant、Layout、TABU、Query、SAPscript 全对象搬运

本文深入解析SAP系统中的Transport机制,将其视为可审计、可追溯的变更流水线。文章从CTS/Transport Organizer通用方法论和具体对象搬运手法两个层面展开,详细介绍了LSMW项目、程序Variant、屏幕/ALV Layout、表数据、ABAP Query、SAPscript和SO10标准文本等对象的传输策略。通过真实案例说明,代码对象往往能被正确传输,但"运行体验"和"业务配置"却常被遗漏,导致QAS测试正常而PRD环境异常。文章提供了一套可

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 168

新蜂商城第三方登录:微信、QQ与支付宝授权接入完整指南

🔥 **新蜂商城Vue3.2版本**作为一款基于Vue3全家桶+Vant搭建的大型单页面商城项目,为用户提供了便捷的第三方登录功能。本文将详细介绍如何在项目中实现微信、QQ与支付宝的授权接入,让用户享受一键登录的便利体验。 ## 🚀 第三方登录功能概述 新蜂商城支持多种第三方登录方式,包括微信、QQ和支付宝授权登录。通过集成这些主流平台的OAuth2.0认证机制,用户无需注册新账号,即可快

gitblog_01109的博客 741

OpenCV实战之人脸美颜美型(八)——大眼(上)

从大众审美的角度来看,眼睛适当的“变大”会让人显得更加年轻。因此美型中就有一项大眼功能,其效果就是让眼睛适当变大,这章内容就围绕着大眼算法展开。

On my way 1211

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

对QQ、微信等第三方登录的几个思考

今天聊聊注册、登录环节中很常见的第三方登录,如QQ、微信、支付宝、新浪微博等。虽然这些产品的开放平台都提供了标准的接入文档,但是在接入时还有些问题需要想清楚。 1 第三方登录目的 第三方登录的目的很简单,就是利用用户在其他平台上频繁使用的账号,来快速登录你的产品,达到不注册就登录的目的。 2 第三方登录好处 第三方登录的好处,显而易见。 不需要注册账号,直接使用已有的QQ号、微...

alct84178的博客 314

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

超赞!终于有网友用Java实现了第三方qq账号登录...

点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达推荐:一套SpringCloud电商项目,拿来即用(附详细教程和文档)! 作者:人间蒸发来源:zuidaima.com/blog...

公众号-老炮说Java 587

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

超赞!终于有网友用 Java 实现了第三方 QQ 账号登录。。。

点击上方“芋道源码”,选择“设为星标”管她前浪,还是后浪?能浪的浪,才是好浪!每天 8:55 更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2020 超神之路,很肝~...

芋艿V 253

第三方登录的套路,你get到了吗?

前言: 第三方登录,是指用户可以不在本项目中输入密码,而直接通过第三方的验证,成功登录本项目。登录环节中很常见的第三方登录,如QQ、微信、支付宝、新浪微博等。第三方登录具有显著的便捷和高效特点,极大地方便了用户的操作使用,但相应的也会有局限性,好吧,一起来看下吧~ 1,使用第三方登录优点: 基于用户而言: 1.方便用户使用第三方账号快捷登录,简化注册过程; 2.不必费尽心思地记住账户密码,可...

wx_carry156176 624

《果然新鲜》电商项目(32)- QQ授权联合登录

该项目是采用目前比较流行的`SpringBoot`/`SpringCloud`构建微服务电商项目,项目叫 **《果然新鲜》**,实现一套串联的微服务电商项目,能完全掌握该知识,可以在一线城市拿到月薪25+k薪资。 完全符合一线城市微服务电商的需求,对中国程序猿学习微服务电商架构,有非常大的帮助,该项目涵盖从微服务电商需求讨论、数据库设计、技术选型、互联网安全架构、整合`SpringCloud`各自组件、分布式基础设施、使`Docker+k8s+jenkins`实现微服务自动化部署、项目上线域名配置

专业的计算机毕业设计指南 618

浅谈第三方登录

第三方登录介绍 第三方账号登录,尤其是以OAuth方式登录,可以有效降低用户注册、使用新网站的门槛,同时也可以降低新网站用户身份鉴别的难度,属于新网站、用户和第三方账号提供方三者共赢的一种方式。目前,国外的Facebook、Google、Twitter、Foursquare等基础服务的提供方大多都支持用户以OAuth鉴权方式登录其他网站,国内的QQ、微博平台、豆瓣等,也都开始支持OAuth鉴权...

weixin_33682790的博客 523

97.电商网站技术要点剖析

第三方登录是指利用第三方网站(通常是知名社交网站)的账号进行登录验证(主要是通过知名第三方网站获取到用户相关信息),比如国内的 QQ、微博,国外的Google、Facebook等。第三方登录大部分都是使用。静态资源的管理可以自己架设文件服务器或者分布式文件服务器(FastDFS),但是一般的项目中没有必要这样做而且效果未必是最好的,我们建议使用云存储服务来管理网站的静态资源,国内外的云服务提供商如。等都提供了非常优质的云存储服务,而且价格也是一般公司可以接受的,具体的操作可以参考官方文档,例如:阿里云的。

优创学社 1505

第三方登录 Oauth协议 及应用场景

第三方登陆      第三方登录是基于用户在第三方平台上已有的账号和密码来快速完成己方应用的登录或者注册的功能。而这里的第三方平台,一般是已经拥有大量用户的平台,国外的比如Facebook,Twitter等,国内的比如微博、微信、QQ等。 第三方登录的目的是使用用户在其他平台上频繁使用的账号,来快速登录己方产品,也可以实现不注册就能登录。 2.第三方登录的优缺点分析         第三方登...

weixin_43681591的博客 982

电商系统-用户认证(一)

电商项目 用户认证解决方案

kong7906928的博客 996

实战指南:从零到一为你的网站集成QQ与微信扫码登录

本文详细介绍了如何为网站集成QQ与微信扫码登录功能,从创建开发者账号到前端SDK集成,再到后端用户信息处理,提供了一套完整的实战指南。通过接入社交登录,可显著提升用户注册转化率和留存率,同时降低开发成本。文章还涵盖了常见问题解决方案,帮助开发者避开实际项目中的各种坑。

weixin_29327977的博客 380
上一篇: 完整电商项目--(四)用户登录(3):第三方登录-QQ登录
下一篇: 完整电商项目--(四)用户登录(5):QQ登录- 账号绑定中的数据加密,解密操作itsdangerous
我是py呀
博客等级 码龄8年 205粉丝 130原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值