资讯专栏INFORMATION COLUMN

Django使用Social-Auth实现微信第三方网站扫码登录

fox_soyoung / 3479人阅读

摘要:前言之前让网页公司制作新官网的时候规划有第三方账号的登录功能,但由于当时的一些开放平台申请步骤比较繁琐尤其是微信开放平台,所以一直拖延着,到了最近只能自己添加相关的功能。

前言

之前让网页公司制作新官网的时候规划有第三方账号的登录功能,但由于当时的一些开放平台申请步骤比较繁琐(尤其是微信开放平台),所以一直拖延着,到了最近只能自己添加相关的功能。

由于是刚接触PythonDjango,期间找了好多视频和资料学习练习,才慢慢把MVT结构什么的弄明白了,第三方登录方面百度找到了两篇很有用的文章,也从中学习到了很多:

1. python实现微信第三方网站扫码登录(Django)
2. 用django-social-auth 做中国社交网站三方登录(QQ,微博,豆瓣,百度,人人,微信)

在实现QQ、微博的登录时就深刻体会到使用social-auth来实现第三方登录是非常简单方便、直接而且完美的,只需要添加配置内容,一句代码都不需要写,真的是一句处理的代码都不需要写哦!
然而却一直没有找到微信怎么也同样来实现(上面第二篇文章虽然标题有,但文章内却压根没有提及);从social-auth的解读文档里也愣是没找到Weixin的内容,由于官网已经有相应的User数据表以及存储第三方的UserSocialAuth数据格,非常规范,在使用上面第一种方法实现之后却苦恼于用户数据表的添加和修改,真心不想破坏那种结构,就在重拾social-auth想学习一下数据库存储方式的时候,竟然在social-backends里发现了Weixin.py,那不就说明能支持微信么?

注意事项

微信开放平台申请及开通需要提交很多认证资料,也需要缴纳¥300每年的认证费用;与公众号、服务号等不一样哦。地址:http://open.weixin.qq.com

认证通过后,添加相应的网页应用,注意授权回调域的填写,写网站的主域名即可,比如说不能写www.zzmxy.com/login/wechat之类的,只需要写www.zzmxy.com 即可(不需要添加http或者https),不然后期都是redirect_uri 参数错误!

实操步骤

安装social-auth
由于官网使用的是python-social-auth==0.2.12,下载源码回来之后,发现在social-backends里也是有Weixin.py的,证明可用(Ubuntu + Python2.7 + Django1.7);

pip install python-social-auth==0.2.12

social-auth配置:

SOCIAL_AUTH_PIPELINE配置:请参考上面提及的第二篇文章的书写;

AUTHENTICATION_BACKENDS配置:

AUTHENTICATION_BACKENDS = (
   "social.backends.weibo.WeiboOAuth2",      #微博的功能
   "social.backends.qq.QQOAuth2",            #QQ的功能
   "social.backends.weixin.WeixinOAuth2",    #这个是导入微信的功能
   "oscar.apps.customer.auth_backends.EmailBackend",
   "django.contrib.auth.backends.ModelBackend",
   )

微信开放平台应用APPIDSECRET的配置:

SOCIAL_AUTH_WEIBO_KEY = "53*****29"
SOCIAL_AUTH_WEIBO_SECRET = "272152************81a8b3"
SOCIAL_AUTH_QQ_KEY = "10*****51"
SOCIAL_AUTH_QQ_SECRET = "5807************d15bd97"
SOCIAL_AUTH_WEIXIN_KEY = "wx4fb***********599"            #开放平台应用的APPID
SOCIAL_AUTH_WEIXIN_SECRET = "f1c17************08c0489"    #开放平台应用的SECRET

配置完之后,运行你的网站,使用 www.域名.com/login/weixin 访问即可打开相应的页面了,但有没有发现出现错误了:Scope参数错误或没有Scope权限,实际操作过程中,我发现social-auth自动生成的二维码访问链接里,是少了一个scope参数,而微信官方给的二维码访问链接是这样的:

https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

如上需要的参数为5个,state可省略,但scope则是必需的,而对于网页授权的访问,scope作用域参数为固定值scope=snsapi_login,这样的话,我们就需要在social-auth的源代码上,把这个参数值给加上,根据你实际的site-packages安装路径,找到/social/backends/weixin.py文件,如我使用VirtualEnv建的路径是:

/home/ubuntu/env/mppython/lib/python2.7/site-packages/social/backends/weixin.py

打开这个文件,找到里面def auth_params()这一段内容(原文):

def auth_params(self, state=None):
    appid, secret = self.get_key_and_secret()
    params = {
        "appid": appid,
        "redirect_uri": self.get_redirect_uri(state),
    }
    if self.STATE_PARAMETER and state:
        params["state"] = state
    if self.RESPONSE_TYPE:
        params["response_type"] = self.RESPONSE_TYPE
    return params

params字典里,添加一个scope参数即可,修改后如下:

def auth_params(self, state=None):
    appid, secret = self.get_key_and_secret()
    params = {
        "appid": appid,
        "redirect_uri": self.get_redirect_uri(state),
        "scope": "snsapi_login",
    }
    if self.STATE_PARAMETER and state:
        params["state"] = state
    if self.RESPONSE_TYPE:
        params["response_type"] = self.RESPONSE_TYPE
    return params

修改保存后,再重新运行工程,再次访问 www.域名.com/login/weixin 即可看到效果了!

后记

本文的内容是在《用django-social-auth 做中国社交网站三方登录(QQ,微博,豆瓣,百度,人人,微信)》基础上扩展的,有些地方并没有细化或者深入说明(比如说urls的配置等),如果看不太明白的朋友,请转到上述文章查找相关的信息或者留言交流,谢谢!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38521.html

相关文章

  • python实现微信三方网站扫码登录(Django)

    摘要:写在前面本周刚在项目中实现了微信第三方网站扫码登录。准备与注意事项微信公众平台跟微信开放平台是两个不同的平台,别搞混了。参数在微信开放平台中查看。 写在前面 本周刚在项目中实现了微信第三方网站扫码登录。因为第一次写相关项目,所以遇到了很多坑。所以写这篇文章是希望像我之前那样的小白也能从容的开发,不要浪费无谓的时间,这篇文章尽量写的详细简单。准备与注意事项 微信公众平台跟微信开放平台是...

    lemanli 评论0 收藏0
  • 说说微信扫码登录

    摘要:详情接口我们这里主要讲的是网站应用,网站应用微信登录是基于协议标准构建的微信授权登录系统即上面的协议。在微信客户端授权登录获取用户信息的可以查看。微信授权登录目前支持模式,适用于拥有端的应用授权。 一、OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。 ...

    Jokcy 评论0 收藏0
  • Django搭建个人博客:用django-allauth实现三方登录

    摘要:比较流行的解决方案是允许用户通过第三方登录,即可以通过微博这类知名社区的授权,从而登录你的小站,免去了注册的麻烦。微博微信的登录方式大致都遵循这个流程本章虽然加载了微博的接口,但是限于篇幅并没有配置,请读者查阅官方文档去实现。 现在我们已经拥有一个可以进行用户本地登录的博客系统了。如果有人欣赏你的文章,说不定就会注册成为本地用户,并和你好好交流一番。 但头疼的是,用户可能每天都在互联网...

    waruqi 评论0 收藏0
  • 微信公众号开发小记——2.80端口上的服务

    摘要:微信在做一些操作是需要用到生成二维码等而每天接口的调用上限为,需要自己做缓存文档讲了几种方式,我觉得放在中拿比较妥当。微信菜单会缓存分钟,你可以取消关注,然后在关注查看菜单变化效果。 描述 微信公众号开发基本分为2大种类型 1.用户直接做了某些操作(回复信息、订阅、扫码、发语音、点按钮等),此时这些信息微信会发送到微信服务器的80端口,这是一种开发类型;2.通过连接(按钮、文章)引导用...

    frank_fun 评论0 收藏0
  • 微信开放平台扫码登录获取用户基本信息!附可用demo

    摘要:微信开放平台提供了网站扫码登录的接口,用于获取用户基本信息头像,昵称方便网站快速接入微信登录,快捷登录。需要使用登录接口,需要成为微信开放平台认证开发者元才可以获得这个接口权限。 微信开放平台提供了网站扫码登录的接口,用于获取用户基本信息(头像,昵称)方便网站快速接入微信登录,快捷登录。需要使用登录接口,需要成为微信开放平台认证开发者(300元)才可以获得这个接口权限。 准备工作: 1...

    flybywind 评论0 收藏0

发表评论

0条评论

fox_soyoung

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<