[每日一学] 使用Django实现微信公众号用户openid登录认证
作者:CC下载站 日期:2021-05-22 00:00:00 浏览:46 分类:涨姿势
最近在用Django做一个小项目,需要将微信的用户与网站的用户进行关联,由于是微信的订阅号,没有oauth网页授权的权限,只能退而求其次,在响应中获取用户的openid,来唯一的标识用户。
Django中用户的模型继承和扩展于AbstractUser,在用户模型中添加openid字段(models.py):
classUsers(AbstractUser): openid=models.CharField(max_length=100,blank=True,null=True,verbose_name="openid",unique=True)
我们扩展了用户的模型,并使用这个模型来作为用户认证的模型,需要在setting.py文件里指定认证的模型(website是django应用的名称,非项目名称):
AUTH_USER_MODEL='website.Users'
这样,我们就能够使用上面定义的Users模型来进行用户的登录和注册操作了。
一个常见默认的Django登录认证,使用的是authenticate,在此引用Django文档中的叙述:
认证一个给定用户名和密码,请使用authenticate()
它以关键字参数形式接收凭证,对于默认的配置它是username
和password,如果密码对于给定的用户名有效它将返回一个User对象。
如果密码无效,authenticate()返回None。
例子:from django.contrib.auth import authenticate user = authenticate(username='john', password='secret') if user is not None: if user.is_active: print("User is valid, active and authenticated") else: print("The password is valid, but the account has been disabled!") else: print("The username and password were incorrect.")
如果authenticate返回正确的User对象,我们再使用login()方法,对返回的User对象进行登录:
fromdjango.contrib.authimportlogin login(request,user)
这样就完成了一个最基本的Django用户认证。
如果我们要用其他的方式进行登录认证呢,比如电子邮箱、手机号、或是本文所说的重点:微信openid,那就需要自定义认证方式。
在Django中进行自定义认证很是方便,完成一个自定义的认证只需要三步:
1、编写一个认证后端:
一个认证后端是个实现两个方法的类: get_user(user_id)和authenticate(**credentials)
在此,我们新建一个py文件wechatAuth.py来写openid的认证后端:
from.modelsimportUsers'''
微信openid认证登录
'''classWechatOpenidAuth(object):defget_user(self,id_):try:
returnUsers.objects.get(pk=id_)
exceptUsers.DoesNotExist:
returnNonedefauthenticate(self,openid=None):try:
user=Users.objects.get(openid=openid)
ifuserisnotNone:
returnuser
else:
returnNoneexceptUsers.DoesNotExist:
returnNone
2、在配置文件setting.py中指定认证后端:
在底层,Django 维护一个“认证后台”的列表。
当调用django.contrib.auth.authenticate() 时,Django 会尝试所有的认证后台进行认证。
如果第一个认证方法失败,Django 将尝试第二个,以此类推,直至试完所有的认证后台。
使用的认证后台通过AUTHENTICATION_BACKENDS 设置指定。
AUTHENTICATION_BACKENDS=('django.contrib.auth.backends.ModelBackend',
'website.wechat_auth.WechatOpenidAuth',)
第一个认证后端是Django默认的认证方式,因为在Web端还需要使用,所以保留,第二个就是基于openid的认证后端。
3、使用自定义的认证后端处理登录授权:
同样的使用authenticate()方法和login()方法,但是我们只传入一个参数进去,就是openid
fromdjango.contrib.authimportlogin,authenticatedefauth(request,openid):
try:
auth=authenticate(openid=openid)
login(request,auth)
print("登录成功",auth)
exceptExceptionase:
print(e)
这样,一个基于openid的认证就完成了。
在微信的订阅号中,我们可以利用click事件返回一个文本消息或图文消息,在其链接之中带上openid的参数。这样,当用户点击链接,就可以静默地完成用户的登录了。
猜你还喜欢
- 04-17 [涨姿势] 餐饮管理故事:对不起,我订错了雅间,怎么办?(附解决方案)
- 03-29 [摄影课堂] 电光火石间的决定
- 03-29 [摄影相关] UV镜不要随便将就
- 03-29 [摄影技巧] 抗光害滤镜 | 还原城市最美夜景 城市夜空的色彩救星!
- 03-29 [设计] 无边泳池是怎么设计的?以及它的原理介绍
- 03-29 [摄影] 我们应该怎么去看待摄影的能力?
- 03-27 [涨姿势] 爆冷的最强事业编,活少钱多,一年只有5个月在上班…
- 03-27 [涨姿势] 70年代中国打飞机教程:姿势全面内容详细!
- 03-25 [摄影] 使用除雾带后镜头起雾结霜一样能驰骋沙场
- 03-22 [摄影] 郁金香花朵怎么拍好看 注意这几点就可以了 花卉摄影技巧教程
- 03-06 [关于AI] 天天用AI还不知道AI是怎么反馈的?一文了解生成模型常见损失函数Python代码实现+计算原理解析
- 02-01 [AI绘图] “比较详细”的免费绘制爱好图的教程,我所体验到的开源中最佳效果
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[美食] 老北京特色烤鸭为什么如此出名?美味在哪里呢?
[美食] 抓住春天长高好时机,多给孩子喝6种“助长汤”,补钙发育长高个
[涨姿势] 餐饮管理故事:对不起,我订错了雅间,怎么办?(附解决方案)
[美食] 冰滴咖啡还能这样做?教你在家自制“冰滴壶”~
[美食] 春天多吃糯米好处多,教你8个神仙吃法,一补气色,二健脾又养胃
[音乐] 群星 - 国语经典101(6CD)【16bit 44.1kHZ Flac】
[文章资料] 知乎文大合集(书单排行榜+付费文合集)
[远程管理] PuTTY中文版(linux远程工具SSH客户端)0.81
[上传下载] FileZilla Free v3.67.0 / PRO v3.66.5 正式版
[硬件相关] IObit Driver Booster PRO破解版v11.4.0.57
[资料] [大学期末救急课] 猴博士+高斯课堂+斐多课堂,全集视频合集
[云资源] 价值2万元的老男孩Python教程
[书库] 史上最全摄影书推荐(附700本PDF版打包下载)
[云资源] 花了一千多元买的私人健身教程
[下载工具] Internet Download Manager 6.42.7 (IDM)
[影视] 灌篮高手 WEB-DL版下载/Slam Dunk/スラムダンク/灌篮高手:THE FIRST/灌篮高手电影版 2022 The First Slam Dunk 61.35G
[即时通讯] 腾讯QQ PC版9.7.22.29315去广告绿色纯净版
[开发环境] PhpStorm2023中文激活版v2023.3.3 正式版
[资料] 3000 套电影电视剧 LOGO 宣传片常用音效合集包
[安卓软件] 酷我音乐APP_v10.7.6.4 去广告破解豪华VIP版
[云资源] 价值2万元的老男孩Python教程
[影视] 灌篮高手 WEB-DL版下载/Slam Dunk/スラムダンク/灌篮高手:THE FIRST/灌篮高手电影版 2022 The First Slam Dunk 61.35G
[云资源] 花了一千多元买的私人健身教程
[书库] 史上最全摄影书推荐(附700本PDF版打包下载)
[资料] 抗战阵亡将士资料+续编
[电视剧] 三体 (2024) 全8集 网飞版本 中文字幕 合集
[剧集] 繁花 (2023)[全30集][打包]
[影视] 三大队 WEB-DL版下载/Endless Journey/请转告局长,三大队任务完成了 2023 三大队 6.7G
[纪录片] 河西走廊【10集 国语 中文字幕 1080P 10.8G MP4】
[安卓软件] OfficeSuite中文版APP v14.2.50872.0破解版
- 最新评论
-
谢谢楼主xiaoqi 评论于:04-12 勿在线解压,勿手机解压,请在电脑上用最新款压缩软件解压!推荐360压缩或者好压CC下载站 评论于:04-10 无法解压啊,客服能不能给个解压教程ravengrey 评论于:04-10 谢谢支持!!CC下载站 评论于:03-26 很棒的资源,感谢分享云体风身 评论于:03-26 感谢分享,好东西云体风身 评论于:03-26 谢谢支持!CC下载站 评论于:03-14 央视精品,感谢付出提供。qwer9009 评论于:03-14 谢谢支持!!!CC下载站 评论于:03-13 谢谢分享!Ypc9182 评论于:03-12
- 热门tag