微博第三方登录(DRF)
官方文档:https://python-social-auth.readthedocs.io/en/latest/
1、安装social-auth-app-django
pip install social-auth-app-django
2、注册,
INSTALLED_APPS = [
'social_django',
]
3、由于social_django下已经有migrations,直接migrate进行迁移数据库
./manage.py migrate
数据库中生成五张表
3、配置需要认证的第三方平台
AUTHENTICATION_BACKENDS = (
# 第三方登录相关配置
'social_core.backends.weibo.WeiboOAuth2', # 微博
'social_core.backends.qq.QQOAuth2', # QQ
'social_core.backends.weixin.WeixinOAuth2', # 微信
'django.contrib.auth.backends.ModelBackend',
)
在social_core下几乎集成了全世界所有需要登录的知名平台
4、配置TEMPLATES:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
# 第三方登录配置
'social_django.context_processors.backends',
'social_django.context_processors.login_redirect',
],
},
},
]
5、配置url
urlpatterns = patterns(
url('', include('social_django.urls', namespace='social'))
)
6、配置第三方登录的key和select
SOCIAL_AUTH_WEIBO_KEY = 'foobar'
SOCIAL_AUTH_WEIBO_SECRET = 'bazqux'
# 需要到qq开放平台设置key和select
SOCIAL_AUTH_QQ_KEY = 'foobar'
SOCIAL_AUTH_QQ_SECRET = 'bazqux'
# 需要到微信开放平台设置key和select
SOCIAL_AUTH_WEIXIN_KEY = 'foobar'
SOCIAL_AUTH_WEIXIN_SECRET = 'bazqux'
7、指定第三方授权登录成功后跳转的url,我设置的是首页
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/index/'
8、修改源码;
social_django 组件对原生 django 的支持较好, 但是因为 在DRF进行的验证为 JWT 方式 和 django 的验证存在区别, 因此需要修改部分源码。
修改social_core下actions.py中do_complete函数:
更改后再验证第三方登录时可能会出现以下报错:
目前可以这样修改, 但是不知道这样会不会造成不好的影响