首页 > 编程知识 正文

python qq登录,python做qq登录页面

时间:2023-05-05 19:52:07 阅读:219153 作者:3218

应用接入前,首先需进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权。http://wiki.connect.qq.com/__trashed-2
QQ登录开发文档连接 http://wiki.connect.qq.com/准备工作_oauth2-0
腾讯QQ互联平台没有python SDK,我们使用封装好的SDK包
安装:pip install QQLoginTool
导入:from QQLoginTool.QQtool import OAuthQQ

OAuthQQ类中的方法: __init__(self, client_id=None, client_secret=None, redirect_uri=None, state=None): client_id : 申请QQ登录成功后,分配给应用的appid。client_secret:申请QQ登录成功后,分配给网站的appkey。redirect_uri:成功授权后的回调地址,必须是注册appid时填写的主域名下的地址,建议设置为网站首页或网站的用户中心。注意需要将url进行URLEncode。state:client端的状态值。用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。请务必严格按照流程检查用户与state参数状态的绑定。 get_qq_url(self) # 获取QQ登录网页网址get_access_token(self, code) # 获取access_token值get_open_id(self, access_token) # 获取open_id值 下面以Django为例实现QQ第三方登录 过程:

获取QQ登录网页网址
接口设计:
请求方式:GET /?state=xxx
请求参数:

参数名类型是否必须说明statestr否登录成功后的跳转页面路径

返回数据:JSON

{ login_url": "https://graph.qq.com/oauth2.0/show?which=Login&display=pc&response_type=code&client_id=**&redirect_uri=**&state=**&scope=**"} 返回值说明login_urlqq登录网址

代码实现:

from QQLoginTool.QQtool import OAuthQQfrom django.conf import settingsfrom rest_framework.views import APIView...# 获取login_urlclass OauthQQLogin(APIView): def get(self, request): # 获取前端传入的参数 state = request.query_params.get('next', None) # 判断是否有,如果没有后端创建一个 if not state: state = '/' # 实例化对象 oauth = OAuthQQ(client_id=settings.QQ_CLIENT_ID, client_secret=settings.QQ_CLIENT_SECRET, redirect_uri=settings.QQ_REDIRECT_URI, state=state) # 获取login_url login_url = oauth.get_qq_url() # 返回login_url return Response({'login_url': login_url})

获取openid

在QQ将用户重定向到此网页的时候,重定向的网址会携带QQ提供的code参数,用于获取用户信息使用,我们需要将这个code参数发送给后端,在后端中使用code参数向QQ请求用户的身份信息

/oauth_callback.html?code=****&state=%2F

oauth_callback回调页,用于扫码后接受Authorization Code
通过Authorization Code获取Access Token
然后通过Access Token获取openid

接口设计:
请求方式:GET /?code=xxx
请求参数:

参数名类型是否必须说明codestr是qq返回的授权凭证code

返回数据:JSON

{ "openid": xxxx } 返回值说明openid用户的ID,与QQ号码一一对应。

代码实现:

from QQLoginTool.QQtool import OAuthQQfrom django.conf import settingsfrom itsdangerous import TimedJSONWebSignatureSerializer as TJSfrom rest_framework.views import APIView...# 获取openid class OauthQQToken(APIView): def get(self, request): # 获取前端传入的code code = request.query_params.get('code', None) # 判断是否有,如果没有直接return if not code: return Response({'message': '缺少code'})oauth = OAuthQQ(client_id=settings.QQ_CLIENT_ID, client_secret=settings.QQ_CLIENT_SECRET,redirect_uri=settings.QQ_REDIRECT_URI) try: # 使用code向QQ服务器请求access_token access_token = oauth.get_access_token(code) # 使用access_token获取openid openid = oauth.get_open_id(access_token) except: return Response({'message': 'QQ服务异常'}) ... 下面可以根据具体需求,进一步向后扩展…

以上内容仅供参考 -_- …为作者边学习,边摘抄和总计的内容

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。