我们只需要通过安装,配置,设置路由便可实现第三方登录并且将用户登录信息保存到我们的用户数据表中。
1 简介
social-auth-app-django 旨在为支持OAuth(1和2),OpenId等协议的Python项目提供易于设置的社交认证和授权机制,集成了大量的第三方登录功能,如:微信,微博,QQ,github,facebook等。
官方文档:https://python-social-auth.readthedocs.io/en/latest/configuration/django.html
2 安装
pip install social-auth-app-django
3 配置
1) 在setting文件中配置:
INSTALLED_APPS = [
'social_django',
]
2) 在项目目录下执行:
./manage.py migrate
执行之后可在项目指定数据库中生成依赖表格
3) 继续在setting文件中配置,
(在backends后设置第三方的小写,在OAuth2之前加上第三方首并且字母大写)
AUTHENTICATION_BACKENDS = (
'social_core.backends.weixin.WeixinOAuth2', # 微信登陆
# 'social_core.backends.***.**OAuth2',
# 'social_core.backends.qq.QQOAuth2',
'django.contrib.auth.backends.ModelBackend',
)
4) 在urls文件中设置路由
urlpatterns = [
# 第三方登陆url
path('', include('social_django.urls',namespace='social'))
]
5) 在setting文件中设置:
注意:SOCIAL_AUTH_后跟第三方名称的全大写,如:QQ,WEIBO等
SOCIAL_AUTH_WEIXIN_KEY ='你的第三方开放平台的appid'
SOCIAL_AUTH_WEIXIN_SECRET ='你的第三方开放平台的secret'
SOCIAL_AUTH_LOGIN_REDIRECT_URL ='/index' # 此处设置登陆完成之后的回调页面,须在第三方平台设置好你的回调域名
6)在setting文件中设置TEMPLATES
TEMPLATES = [
{
'BACKEND':'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')]
,
'APP_DIRS':True,
'OPTIONS': {
'context_processors': [
.......,
'social_django.context_processors.backends',
'social_django.context_processors.login_redirect',
],
},
},
]
backends上下文处理器将backends在上下文中加载一个键,上面有三个条目:
associated
它是UserSocialAuth与当前登录用户相关的实例列表。如果没有当前用户,则为空。
not_associated
尚未与当前用户关联的可用后端名称列表。如果没有用户登录,则它将是所有可用后端的列表。
backends
所有可用后端名称的列表。
即:配置这里,当用户登录的时候,如果用户不存在,会自动在用户表创建用户,并且关联用户信息
4 访问
按照以上步骤设置完成之后,便可通过域名+login+第三方名称小写访问,如:
http://127.0.0.1:8000/login/weixin
http://127.0.0.1:8000/login/qq
5 高级设置
如果有其余项目需要,建议研究一下虚拟环境中的site-packages目录下的socia_core文件夹,其中backends提供了可支持登陆的所有第三方文件,如:豆瓣,亚马逊,facebook等,pipeline提供了关于用户身份的管道,如:获取用户信息
在setting文件中设置
SOCIAL_AUTH_PIPELINE = (
'social_core.pipeline.social_auth.social_details',
)
官方文档介绍更加详细:
https://python-social-auth.readthedocs.io/en/latest/configuration/django.html