zoukankan      html  css  js  c++  java
  • 第三方登陆组件

    GitHub 中搜索:social django app ==>找到: python-social-auth/social-app-django
    文档: https://python-social-auth.readthedocs.io/en/latest/

    # 1. 安装
    pip install social-auth-app-django
    
    # django 配置: https://python-social-auth.readthedocs.io/en/latest/configuration/django.html
    
    # 2. 添加到 INSTALLED_APPS
    INSTALLED_APPS = (
        ...
        'social_django',
        ...
    )
    
    # 3. 数据库迁移:第三方登陆的时候,会新建一些额外的数据表
    python manage.py migrate  # 直接 migrate,不用 makemigrations,因为 migrations文件已经生成好了 
    
    # 4. settings 中配置 AUTHENTICATION_BACKENDS (在源码中查看:social_core/backends)
    AUTHENTICATION_BACKENDS = (
        ...
        "social_core.backends.weibo.WeiboOAuth2", # 所要添加的第三方登陆;如果还需要其它的第三方登陆,下面可继续添加
        "social_core.backends.qq.QQOAuth2",
        "social_core.backends.weixin.WeixinOAuth2",
        'django.contrib.auth.backends.ModelBackend',
        ...
    )
    
    # 5. 配置 URL
    urlpatterns = patterns('',
        ...
        url('', include('social_django.urls', namespace='social')), # 第三方登陆URL;如果已经有用户登陆,则会将第三方登陆的用户和当前用户绑定,否则第三方登陆后将在你的网站上新创建一个用户
        ...
    )
    
    # 6. 对于 Django 的 MTV模式,设置 template
    <a href="{% url "social:begin" "weibo" %}">微博</a>  # social:begin social表示名称空间,begin表示 name="begin"的那个url;
    <a href="{% url "social:begin" "google-oauth2" %}">Google+</a>
    
    # 7. 配置 Template Context Processors
    TEMPLATES = [
        {
            ...
            'OPTIONS': {
                ...
                'context_processors': [
                    ...
                    'social_django.context_processors.backends',
                    'social_django.context_processors.login_redirect',
                    ...
                ]
            }
        }
    ]
    
    # 8. 在setting中设置 APP key 和 APP secret
    SOCIAL_AUTH_WEIBO_KEY = 'weiboappkey...'
    SOCIAL_AUTH_WEIBO_SECRET = 'weiboappsecret...'
    
    # 9. 第三方登陆成功后的跳转
    SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/index/'
    
    # 10. 对于前后端分离的项目使用 python-social-auth/social-app-django(GitHub上的搜索名),需要在第三方包 social_core/actions.py 中的 do_complete() 方法中修改源码(即第三方认证完成后要把 JWT 和 username 通过set_cookie返回给前端),如下:
    from rest_framework_jwt.serializers import jwt_payload_handler,jwt_encode_handler
    def do_complete(backend, login, user=None, redirect_name='next',
                    *args, **kwargs):
        ...
        response = backend.strategy.redirect(url)  # 完成第三方登陆后,所要重定向的URL
    
        # 前后端分离的项目中,需要把 JWT 添加到cookie中返回给前端
        payload = jwt_payload_handler(user)
        response.set_cookie("token",jwt_encode_handler(payload),max_age=7*24*3600)  # 设置 cookie;一定要加过期时间 max_age
        response.set_cookie("name",user.name if user.name else user.username,max_age=7*24*3600)
        return response
    
        
    # 注:微博第三方登陆时,授权回调页的 地址一定要和本机的IP地址保持一致(如果是在服务器上,就和服务器的IP地址保持一致),如:127.0.0.1:8000/complete/weibo/  这个回调页是由微博向你的 浏览器 发送了一个重定向的命令;而支付宝的 notify_url 是 支付宝向你的 服务器 发送了一个Post请求
  • 相关阅读:
    【转】我是一个线程
    前端之 JS 实现全选、反选、取消选中
    Python文件操作——逐行插入内容
    angularJs实现数据双向绑定的原理
    手机连接电脑调试页面
    工程化框架之feather
    网页上线后音频不能自动播放
    FormData对象
    地图热区自适应
    需求移交会
  • 原文地址:https://www.cnblogs.com/neozheng/p/9888573.html
Copyright © 2011-2022 走看看