When we asked the web company to create a new official website, we planned to have a third-party account
login function, but due to the relatively complex application procedures of some open platforms at that time It is cumbersome (especially the WeChat open platform), so I have been procrastinating it. Recently, I can only add related functions myself.
Since I am new to <a href="http://www.php.cn/wiki/1514.html" target="_blank">Python</a>
and <a href="http://www.php.cn/wiki/1515.html" target="_blank">Django</a>
, I found a lot of videos and After studying the materials and practicing , I slowly figured out the MVT structure
and so on. Baidu found two very useful articles on third-party login, and I learned a lot from them:
1. Python implements QR code scanning login for third-party websites on WeChat (Django)
2. Use django-social-auth for three-party login on Chinese social networking sites (QQ, Weibo, Douban, Baidu, Renren, WeChat)
When I implemented QQ and Weibo login, I deeply realized that using social-auth
to achieve third-party login is very simple, convenient, direct and perfect, but I have never found it# How can ##微信 be implemented in the same way (the second article above also did not mention it); from the interpretation document of
social-auth, I couldn’t find the content of Weixin, because the official website has There is a corresponding
User data table and a third-party
UserSocialAuth data grid, which is very standardized. After using the first method above, I was troubled by adding and modifying the user data table. I really didn’t want to destroy that structure, so when I picked up
social-auth and wanted to learn how to store databases, I discovered it in
social-backend<a href="http://www.php.cn/wiki/1048.html" target="_blank">s</a>
Weixin.py, doesn’t that mean it can support WeChat?
WeChat Open Platform Application and activation require submission of a lot of certification information. You also need to pay an annual certification fee of RMB
300; it is different from official accounts, service accounts, etc. Address: http://open.weixin.qq.com
authorization callback domain, and write the website The main domain name is enough. For example, you cannot write
www.zzmxy.com/login/wechat. You only need to write
www.zzmxy.com (no need to add http Or https), otherwise the subsequent periods will all be
redir<a href="http://www.php.cn/wiki/1275.html" target="_blank">ect_uri parameter errors</a>!
Installationsocial-auth:
Since the official website uses
python-social-auth==0.2.12 , after downloading the source code, I found that there is also
Weixin.py in
social-backends, which proves that it is available;
pip install python-social-auth==0.2.12
social-authConfiguration:
SOCIAL_AUTH_PIPELINEConfiguration: Please refer to the writing of the second article mentioned above;
AUTHENTICATION_BACKENDS Configuration:
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', )
APPID and
SECRET :
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
Scope parameters are wrong or there is no Scope permission. During the actual operation, I found that
social-auth is missing a
in the automatically generated QR code access link. scope parameter, and the QR code access link provided by WeChat is as follows:
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
state can be omitted, but
scope is required, and for authorized access to web pages, the
scope scope parameter is a fixed value
scope=snsapi<a href="http://www.php.cn/js/js-weixinapp-api.html" target="_blank">_login</a>. In this case, we You need to add this parameter value to the source code of
social-auth, and find
/social/backends/ according to your actual site-packages
installation path. weixin.py file, for example, the path I created using
VirtualEnv is:
/home/ubuntu/env/mppython/lib/python2.7/site-packages/social/backends/weixin.py
def auth_params() ( Original text):
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 dictionary, just add a
scope parameter, and the modification is as follows:
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
The above is the detailed content of Introduction to how Django uses Social-Auth to implement QR code login on WeChat third-party websites. For more information, please follow other related articles on the PHP Chinese website!