第三方登陆需要去官方的开放平台去申请,获得必要的参数,以下是各个官网的开发平台网址:
qq: https://connect.qq.com/
weixin:https://open.weixin.qq.com/
weibo:https://open.weibo.com/
需要去创建应用获得相关的值
我们用social_django第三方库来实现第三方登录
github地址: https://github.com/python-social-auth/social-app-django
pip install social-auth-app-django
'social_django',
只需要做migrate,因为migration的文件已经生成好了,我们在源码中可以看到
python manage.py migrate
可以看到数据库中多了五张表
AUTHENTICATION_BACKEND=(
#自定义用户认证
'apps.user.views.CustomBackend',
'django.contrib,auth.backends.ModelBackend',
'social_core.backends.weibo.WeiboOAuth2',
'social_core.backends.qq.QQOAuth2',
'social_core.backends.weixin.WeixinOAuth2',
)
'social_django.context_processors.backends',
'social_django.context_processors.login_redirect',
注意:自己的网站登陆地址后面需要加$否则会和第三方登录发生冲突
# 第三方登录
path('', include('social_django.urls', namespace='social')),
# jwt认证接口,自己网站登陆访问的地址
url('^login/$', obtain_jwt_token),
第三方登陆的地址可以在源码中看到:选择的什么第三方backend就会变
# 第三方登录,里面的值是你的开放平台对应的值
SOCIAL_AUTH_WEIBO_KEY = 'xxxxxxx'
SOCIAL_AUTH_WEIBO_SECRET = 'xxxxxx'
SOCIAL_AUTH_QQ_KEY = 'xxxxxxx'
SOCIAL_AUTH_QQ_SECRET = 'xxxxxxx'
SOCIAL_AUTH_WEIXIN_KEY = 'xxxxxxx'
SOCIAL_AUTH_WEIXIN_SECRET = 'xxxxxxx'
#登录成功后跳转到首页
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/index'
这样就成功登陆了但是因为是前后端分离项目,并没有实现状态保持
修改源码:
登录成功跳到首页,发现还处于未登录状态,我们需要对源码做修改
找到这个文件social_core/actions.py进行修改
原始代码
return backend.strategy.redirect(url)
# 修改源码适配drf
response = backend.strategy.redirect(url)
#获取用户
payload = jwt_payload_handler(user)
# 设置cookie
response.set_cookie("name",user.name if user.name else user.username, max_age=24*3600)
response.set_cookie("token", jwt_encode_handler(payload), max_age=24*3600)
return response
这样就成功登陆了