DjangoRestFramework整合social-auth-app-django实现第三方登录

  1. 第三方登录原理介绍见上篇,第三方登录流程

  2. social-auth-app-django官方文档地址

  3. DjangoRestFramework整合social-auth-app-django实现第三方登录流程

    • 用户点击第三方登录链接进入微博登录页面
    • 用户输入用户名密码,获取授权码,授权服务器验证用户信息和客户端信息
    • 浏览器重定向到回调url,获取access_token
    • 根据access_token调接口获取用户信息
    • 首次登录:创建用戶,创建用户信息关联表
    • 第二次登录:已有用户认证
    • 重定向到第三方应用并实现登录
  4. 安装第三方库social-auth-app-django

    pip install social-auth-app-django
    
  5. 注册app

    INSTALLED_APPS = (
        ...
        'social_django',
        ...
    )
    
  6. 执行数据库迁移操作,创建数据库表

    python manage.py migrate
    
  7. 添加微信、QQ、微博backends到settings.py配置文件中

    AUTHENTICATION_BACKENDS = (
        'social_core.backends.weibo.WeiboOAuth2',
        'social_core.backends.weixin.WeixinOAuth2',
        'social_core.backends.qq.QQOAuth2',
        'django.contrib.auth.backends.ModelBackend',
    )
    
  8. 添加根路由到urls.py,这里主要有两个路由地址,login/...,主要是实现返回授权码的功能,complete/...,主要是实现后续获取access_token,创建用户,关联用户,认证和跳转登录功能

    urlpatterns = patterns('',
        ...
        url('', include('social_django.urls', namespace='social'))
        ...
    )
    

    screenshot_11.png

  9. 添加context_processors到template

    TEMPLATES = [
        {
            ...
            'OPTIONS': {
                ...
                'context_processors': [
                    ...
                    'social_django.context_processors.backends',
                    'social_django.context_processors.login_redirect',
                    ...
                ]
            }
        }
    ]
    
  10. 添加应用key和secret到配置文件settins.py中

    SOCIAL_AUTH_TWITTER_KEY = 'foobar'
    SOCIAL_AUTH_TWITTER_SECRET = 'bazqux'
    
  11. settins.py中配置用户完成登录之后的跳转url

    SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/index/'
    
  12. 前后端分离的项目中将token放进响应cookie中实现登录跳转之后自动登录
    screenshot_9.png
    screenshot_10.png

  13. 实现微博第三方登录,浏览器输入地址http://127.0.0.1:8000/login/weibo
    screenshot_14.png
    screenshot_15.png

原文地址:https://www.cnblogs.com/iread9527/p/13138179.html