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请求
  • 相关阅读:
    mysql 远程登陆不上
    hdu 5339 Untitled【搜索】
    SqlServer 书目
    passwordauthentication yes
    oracle 11g RAC ocfs2
    Oracle 11g RAC database on ASM, ACFS or OCFS2
    CentOS ips bonding
    Oracle 11g RAC features
    openStack 王者归来之 trivial matters
    openstack windows 2008 img
  • 原文地址:https://www.cnblogs.com/neozheng/p/9888573.html
Copyright © 2011-2022 走看看