django-allauth很方便地继承了第三方登陆的功能,但其说明文档并不是很详细,配置一个demo都捉摸了好长时间,这里就以微信订阅号登陆为例,详细地说明一下配置过程,以供其他新上手地小伙伴参考。

获取微信订阅号开发appid

微信公众平台提供了一个测试号方便开发,登陆https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index即可获得一个appID和appsecret,这里但URL和Token都先可以留空,找到下边的网页授权获取用户基本信息,点击右侧的修改,测试号可以填写ip地址,这里为填写的是本地开发时候的本机ip:port, 注意:这个地址是要会出现在回掉地址redirect_url中的,不一致将不能正确授权。【参考:微信公众平台开发——微信授权登录(OAuth2.0)

微信公众平台测试号

找到网页获取用户基本信息

填写域名

安装配置django-allauth

django-allauth 的Doc已经把安装过程解释的很详细了,就不再重复,只说明一下比较容易出错的地方。

site设置

django-allauth要求设置站点号,如果已经跟着安装过程进行到这一步的话,需要打开django的后台管理程序,会有一个设置好的site(example.com)。

django-allauth Social applications设置

在后台管理找到Social applications,点击添加,把第一步在微信公众平台获取的appid和appsecret填进去,并选择刚刚设置的站点,保存,站点名称不一定需要与微信公众平台填写的一致,这里刚开始理解错了。【参考: Part VIII – User Authentication with a Google Account using Django Allauth

添加social application

测试

下载一个微信web开发者工具,输入微信登陆的地址http://10.0.0.8:8000/accounts/weixin/login/ ,会提示授权、登陆(/accounts/weixin/路径是在django.settings文件中配置的),至此配置结束,在django后台中,可以看到Social accounts和Users两个表新增刚刚登陆的微信用户(allauth默认设置,参考Configuration),测试完成!

注意事项

  • 微信公众平台中设置的域名,要和请求授权url中的回掉参数redirect_uri的域名是一模一样的。如果微信公众平台上的是线上域名,本地测试可以修改hosts文件。

  • 如果使用allauth.weixin的登陆url,也就是accounts/weixin/login(跟着allauth的文档示例会配置成这样的),那么django的域名一定要与微信公众平台上设置的一致,否则默认的回掉地址是django-domain/accounts/weixin/login/callback,微信授权页面不能正常加载。

  • django-allauth的微信配置(我这里配置的是公众号内网页授权,不是pc端扫描二维码授权)。

1
2
3
4
5
6
SOCIALACCOUNT_PROVIDERS = {
'weixin': {
'AUTHORIZE_URL': 'https://open.weixin.qq.com/connect/oauth2/authorize',
'SCOPE': ['snsapi_userinfo'],
}
}

参考:

[1]. django-allauth
[2]. 微信公众平台开发——微信授权登录(OAuth2.0)
[3]. Part VIII – User Authentication with a Google Account using Django Allauth
[4]. Configuration
[5]. 微信web开发者工具
[6]. 网站应用微信登录开发指南