第三方开发平台网址
第三方登陆需要去官方的开放平台去申请,获得必要的参数,以下是各个官网的开发平台网址: qq: https://connect.qq.com/ weixin:https://open.weixin.qq.com/ weibo:https://open.weibo.com/ 需要去创建应用获得相关的值
使用social_django实现第三方登陆
我们用social_django第三方库来实现第三方登录
github地址: https://github.com/python-social-auth/social-app-django
支持哪些第三平台
下载第三包:
pip install social-auth-app-django
INSTALL_APP中配置
'social_django',
生成表:
只需要做migrate,因为migration的文件已经生成好了,我们在源码中可以看到
python manage.py migrate
可以看到数据库中多了五张表
修改settings文件
添加到AUTHENTICATION_BACKENDS中
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',
)
settings里面TEMPLATES添加:
'social_django.context_processors.backends',
'social_django.context_processors.login_redirect',
配置url
注意:自己的网站登陆地址后面需要加$否则会和第三方登录发生冲突
path('', include('social_django.urls', namespace='social')),
url('^login/$', obtain_jwt_token),
第三方登陆的地址可以在源码中看到:选择的什么第三方backend就会变
APP Secret和App key配置,settings里面
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)
修改为
response = backend.strategy.redirect(url)
payload = jwt_payload_handler(user)
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
这样就成功登陆了
|