【django】用户登录模块实现步骤(二)之QQ登录工具AgentLogin和通过OAuth2.0认证获取openid【33】

一、QQ登录工具AgentLogin

1、AgentLogin介绍

⽬前只⽀持 腾讯QQ,微信,微博的第三⽅登录
该⼯具封装了QQ登录时对接QQ互联接⼝的请求操作。可⽤于快速实现QQ登录功能。

2、AgentLogin安装

pip install AgentLogin

3、AgentLogin使⽤说明

from AgentLogin import AgentLogin

获取扫码⻚⾯地址

qq_url = AgentLogin.qq_url(client_id, redirect_uri)

<a href="{{ qq_url }}">QQ登录<a>
client_id:QQ互联上应⽤的APPID
redirect_uri: QQ互联上应⽤的⽹站回调域

获取⽤户名和openid

AgentLogin.qq(client_id, client_secret, url, code)

获取⽤户所有信息

AgentLogin.all_qq(client_id, client_secret, url, code)

client_id:QQ互联上应⽤的 APPID
client_secret: QQ互联上应⽤的APP Key
url: QQ互联上应⽤的⽹站回调域
code: 从QQ服务器得到code
注意此code会在10分钟内过期

二、通过OAuth2.0认证获取openid

1、获取QQ登录扫码⻚⾯

在这里插入图片描述

4.后端逻辑实现

路由:

from django.urls import re_path,path
from .import views

urlpatterns=[
    re_path('^qq/login/$',views.QQLoginURLView.as_view()),
]
class QQLoginView(View):
	def get(self,request):
		'''
		获取QQ扫码登录链接
		'''
		qq_url=AgentLogin.qq_url(client_id=settings.QQ_CLIENT_ID,redirect_url=settings.QQ_REDIRECT_URI)
		return JsonResponse({'code':200,'errormsg':'ok','login_url':qq_url})
		

https://graph.qq.com/oauth2.0/show?which=Login&display=pc&response_type=code&client_id=xxxxxxxxx%20%20%20%20&redirect_uri=http://www.nagle.cn:8083/about&scope=get_user_info

在这里插入图片描述

5、QQ登录参数

# QQ登录的配置参数
QQ_CLIENT_ID = '101917966'          #app id
QQ_REDIRECT_URI = 'http://www.nagle.cn:8083/about'  #回调地址
QQ_APP_KEY = '20fcc768255829c08fa4efbe8acf0001'     #app key

三、接收Authorization Code和OAuth2.0认证获取openid

扫码成功后展示的页面
http://www.nagle.cn:8083/about/?code=34C1002C560320F5B2FFCE850B38A666
在这里插入图片描述

提示:

  • ⽤户在QQ登录成功后,QQ会将⽤户重定向到我们配置的回调⽹址。
  • 在QQ重定向到回调⽹址时,会传给我们⼀个Authorization Code。
  • 我们需要拿到Authorization Code并完成OAuth2.0认证获取openid。
  • 在本项⽬中,我们申请QQ登录开发资质时配置的回调⽹址为:http://www.nagle.cn:8083/about
  • QQ互联重定向的完整⽹址为http://www.nagle.cn:8083/about/?code=34C1002C560320F5B2FFCE850B38A666

配置回调地址路由

from django.urls import re_path,path
from .import views

urlpatterns=[
    re_path('^qq/login/$',views.QQLoginURLView.as_view()),
    re_path('^about/$',views.QQAuthUserView.as_view()),
]

视图:

class QQAuthUserView(View):
	def get(self,request):
		'''
		获取openid
		'''
		#1、获取Authorization code参数
		code=request.GET.get('code','')
		#2、校验参数
		if not code:
			return http.HttpResponseForbidden('缺少code参数')
		#3、调用接口方法获取openid
		nickname,openid=AgentLogin.qq(client_id=settings.QQ_CLIENT_ID,
                                      client_secret=settings.QQ_APP_KEY,
                                      url=settings.QQ_REDIRECT_URI,
                                      code=code)
		#4、通过openid判断用户是否绑定项目用户
		try:
			qq_user=QQAuthUser.objects.get(openid=openid)
		except QQAuthUser.DoesNotExist:
			#QQ用户没有绑定项目用户

			#加密openid数据
			sec_openid=generate_escret_openid(openid)
			#传递加密数据到用户绑定页面
			return render(request,'oauth/oauth_user.html',{'sec_openid':sec_openid})
		else:
			#QQ用户绑定了项目用户
			#获得关联的项目用户对象
			user=qq_user.user
			#状态保持
			login(request,user)
			#响应结果
			return redirect(reverse('newsapp:index')) 

四、本机绑定www.nagle.cn域名

http://www.nagle.cn:8083/about/?code=34C1002C560320F5B2FFCE850B38A666
在这里插入图片描述

1、ubuntu系统或者Mac系统

sudo vi /etc/hosts

127.0.0.1	 www.nagle.cn

2、修改dev.py配置⽂件
ALLOWED_HOSTS = ['www.nagle.cn','127.0.0.1']

3、修改服务器端⼝号
在这里插入图片描述

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值