使用新浪微博开放平台api同步微博内容至自己网站(用django-social-auth做中国社交网站三方登录(QQ,微博,))

优采云 发布时间: 2021-09-24 04:07

  使用新浪微博开放平台api同步微博内容至自己网站(用django-social-auth做中国社交网站三方登录(QQ,微博,))

  前言

  此前,网络公司在做新官网时,就计划有第三方账号的登录功能。但是由于当时一些开放平台的申请步骤比较繁琐(尤其是微信开放平台),所以被推迟了。最近只能自己添加相关的了。功能。

  由于刚接触Python和Django,期间找了很多视频和资料学习和实践,慢慢摸索出MVT的结构。在第三方登录方面,百度发现了两个非常有用的文章,并从中学到了很多:

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

  2. 使用django-social-auth做中文社交网站 三路登录(QQ、微博、豆瓣、百度、人人、微信)

  在实现QQ和微博登录的时候,我深深的体会到,使用social-auth实现第三方登录是非常简单、方便、直接、完美的。只需要添加配置内容,不需要写一句代码。真的是一个处理的句子。无需编写代码!

  但是在微信上没找到同样的实现方法(上面第二篇文章有标题,但是文章根本没有提到);从social-auth的解读文件来看,也是一脸懵逼。微信的内容没找到,因为官网已经有对应的User数据表和第三方的UserSocialAuth数据网格,非常规范。使用上面第一种方法后,对用户数据表的添加和修改很困扰。我真的不想破坏它。那种结构,就在我重新获得了social-auth,想了解数据库存储方式的时候,在social-backends中找到了weixin.py。不是说我们可以支持微信吗?

  注意实际步骤

  安装社交认证:

  由于官网使用的是python-social-auth==0.2.12,下载源码后发现social-backends中也有weixin.py,证明是可用的( Ubuntu + Python2.7 + Django1.7);

  pip install python-social-auth==0.2.12

  社会认证配置:

  配置完成后,运行你的网站,使用域名.com/login/weixin访问对应的页面,但是有没有报错:Scope parameter error or no scope permission,在实际操作中发现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

  修改保存后,重新运行项目,再次访问域名.com/login/weixin看看效果!

  后记

  本文内容在《使用django-social-auth做中文社交网站三方登录(QQ、微博、豆瓣、百度、人人、微信)》的基础上进行了扩展,部分区域不细化或深入讲解(如urls配置等),不明白的请到上面文章查找相关资料或留言交流,谢谢!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线