Django集成第三方登陆(social-django)

第三方开发平台网址

第三方登陆需要去官方的开放平台去申请,获得必要的参数,以下是各个官网的开发平台网址:
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

支持哪些第三平台

Django集成第三方登陆(social-django)_第1张图片

下载第三包:

pip install social-auth-app-django

INSTALL_APP中配置

'social_django',

生成表:

只需要做migrate,因为migration的文件已经生成好了,我们在源码中可以看到

 python manage.py migrate

可以看到数据库中多了五张表

Django集成第三方登陆(social-django)_第2张图片

修改settings文件

添加到AUTHENTICATION_BACKENDS中

Django集成第三方登陆(social-django)_第3张图片

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',

Django集成第三方登陆(social-django)_第4张图片

配置url

注意:自己的网站登陆地址后面需要加$否则会和第三方登录发生冲突

# 第三方登录
path('', include('social_django.urls', namespace='social')),
# jwt认证接口,自己网站登陆访问的地址
url('^login/$', obtain_jwt_token),

第三方登陆的地址可以在源码中看到:选择的什么第三方backend就会变
Django集成第三方登陆(social-django)_第5张图片

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)

Django集成第三方登陆(social-django)_第6张图片
修改为

# 修改源码适配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

Django集成第三方登陆(social-django)_第7张图片

这样就成功登陆了

你可能感兴趣的:(DjangoREST,Fromework,Django,django,python,后端)