zoukankan      html  css  js  c++  java
  • 【Vue+DRF 生鲜电商】集成第三方登录(十一)

    1. 申请微博应用

    微博开放平台:http://open.weibo.com/authentication

    1、微博账号登录开放平台,选择:微连接 --> 网站接入 ---> 立即接入 ---> 创建新应用

    2、 OAuth2.0 授权设置,正常情况下需要经过审核后才可以让第三方登录,不过我们可以使用测试模式来完成实现。

    点击 我的应用 ---> 应用信息 ---> 测试信息 ---> 添加测试账号(用于后续登录,使用你的微博账号就行)

    点击 高级信息 配置 授权回调页

    2. social_django 集成第三方登录

    social_djangohttps://github.com/python-social-auth/social-app-django

    1、安装 social_django

    # pipenv install social_django --skip-lock
    pip install social_django
    

    2、settings INSTALL_APP 中添加 social_django

    INSTALLED_APPS = [
        ....
        'social_django',
    ]
    

    3、social_django 会创建五张数据表,在授权登录成功后会在用户信息表 UserProfilesocial_auth_usersocialauth 表中分别保存用户信息:

    python manage.py migrate    # 生成表
    
    # 生成的五张表
    # social_auth_association
    # social_auth_code
    # social_auth_nonce
    # social_auth_partial
    # social_auth_usersocialauth
    

    4、配置认证后端 settings

    # jwt 自定义用户认证
    AUTHENTICATION_BACKENDS = (
        'users.views.CustomBackend',
    
        # 第三方登录:设置邮箱、用户名和手机号均可登录
        'social_core.backends.weibo.WeiboOAuth2',  # 微博认证后端
        'social_core.backends.qq.QQOAuth2',  # QQ 认证后端
        'social_core.backends.weixin.WeixinOAuth2',  # 微信认证后端
        'django.contrib.auth.backends.ModelBackend',  # 使用了`django.contrib.auth`应用程序,支持帐密认证
    )
    

    5、配置模板 settings

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')]
            ,
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
    
                    # 新增:第三方登录
                    'social_django.context_processors.backends',
                    'social_django.context_processors.login_redirect',
                ],
            },
        },
    ]
    

    6、配置路由 MxShop/urls.py

    # 第三方登录
    path('', include('social_django.urls', namespace='social')),
    

    7、配置 APP Secret、App key 和登录成功跳转页settings

    # 第三方登录,里面的值是你的开放平台对应的值
    SOCIAL_AUTH_WEIBO_KEY = '7886781xxx75'
    SOCIAL_AUTH_WEIBO_SECRET = '0529e2d88a9d5f3461af7537xxxxxxx37c6959'
    
    # 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/'
    

    注意:以上信息在微博开发平台应用信息中可查看。

    8、配置上述后,授权登录时发现仍未登录,需要对源码进行修改:

    # 找到 social_core/actions.py,修改其源码,配置登陆成功后跳转
    cd /root/.local/share/virtualenvs/MxShop-_d0NptB3/lib/python3.6/site-packages/social_core
    
    vim actions.py
    

    social_core/actions.py

    from rest_framework_jwt.serializers import jwt_payload_handler, jwt_encode_handler
    
    
    def do_complete(backend, login, user=None, redirect_name='next',
                    *args, **kwargs):
        ....
    
        if backend.setting('SANITIZE_REDIRECTS', True):
            allowed_hosts = backend.setting('ALLOWED_REDIRECT_HOSTS', []) + 
                            [backend.strategy.request_host()]
            url = sanitize_redirect(allowed_hosts, url) or 
                  backend.setting('LOGIN_REDIRECT_URL')
        
        # 注释
        #    return backend.strategy.redirect(url)
    
        # 添加以下代码
        # 修改源码适配 drf
        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    
    

    9、访问:http://192.168.131.131:8000/login/weibo/ 进行测试:

    登录成功后,可查看 UserProfilesocial_auth_usersocialauth 中的用户信息。

  • 相关阅读:
    获取ServletContext方法
    linux下echo命令详解
    非滤波单目视觉SLAM系统研究
    单目深度估计(Monocular Depth Estimation)之摄像机运动对深度估计的影响
    typedef函数指针用法
    REMODE+ORBSLAM运行配置(2) REMODE和编译后的ORB ros工程利用节点实现通讯
    跟我一起学习Makefile
    ubuntu下通过命令打开多个终端并在相应终端执指令
    REMODE+ORBSLAM运行配置(1) 把ORB编译成ROS工程
    ROS节点与运行
  • 原文地址:https://www.cnblogs.com/midworld/p/13629761.html
Copyright © 2011-2022 走看看