zoukankan      html  css  js  c++  java
  • django 中 Oauth2 实现第三方登陆

    django 中 Oauth2 实现第三方登陆

    python网站第三方登录,social-auth-app-django模块,

    social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块

    目前流行的第三方登录都采用了OAuth2协议

    安装:

    pip install social-auth-app-django

    setting 配置:

    添加应用,

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'verify.apps.VerifyConfig',
        'users.apps.UsersConfig',
        'rest_framework',
        'corsheaders',
    
        'social_django',   
    ]

    2,输入命令migrate来生成第三方登录需要的表

     注:如无法迁移 可更改 mysql引擎配置 

    python manage.py migrate

    注意新生成的这五张表!!!

    3.配置需要的第三方登录模块,settings.py

    先找到这个包的位置。

    继续配置

    # 身份验证后端
    AUTHENTICATION_BACKENDS = [
        'users.utils.UsernameMobileAuthBackend',
    
        'social_core.backends.weibo.WeiboOAuth2',  #微博
        'social_core.backends.qq.QQOAuth2',        #qq
        'social_core.backends.weixin.WeixinOAuth2',#微信
        'django.contrib.auth.backends.ModelBackend'      #指定django的modelbackend 类
    ]

    配置url 

    urlpatterns = [
        path('admin/', admin.site.urls),
        #用户认证
        url(r'^',include('verify.urls')),
        #用户信息注册登录
        url(r'^',include('users.urls')),
        #第三方登录
        url('', include('social_django.urls'))
    ]

    配置这里,当用户登录的时候,如果用户不存在,会自动在用户表创建用户,并且关联用户信息

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [],
            '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' , ], }, }, ]

    使用第三方参数配置:

    # 配置微博开放平台授权(使用其它平台注意更改关键字)
             SOCIAL_AUTH_WEIBO_KEY = '' SOCIAL_AUTH_WEIBO_SECRET = '' # 登录成功后跳转页面 SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/index/'

    第三方平台中需要配置回调url

    # social_django.urls 源码中
    urlpatterns = [
        # authentication / association
        # <backend>是一个变量接收要使用登录模块的名称小写
        # 请求URL
        url(r'^login/(?P<backend>[^/]+){0}$'.format(extra), views.auth,
            name='begin'),
        # 回调URL
        url(r'^complete/(?P<backend>[^/]+){0}$'.format(extra), views.complete,
            name='complete'),
        # disconnection
        url(r'^disconnect/(?P<backend>[^/]+){0}$'.format(extra), views.disconnect,
            name='disconnect'),
        url(r'^disconnect/(?P<backend>[^/]+)/(?P<association_id>d+){0}$'
            .format(extra), views.disconnect, name='disconnect_individual'),
    ]

    请求URL构造为:http://域名或者ip/login/使用模块名称小写/

    如:http://127.0.0.1:8000/login/weibo/

    回调URL构造为:http://域名或者ip/complete/使用模块名称小写/

    如:http://127.0.0.1:8000/complete/weibo/

    回调URL一般需要设置到开放平台的后台

    前台页面可以调用,请求url

    最后 登录测试 查看下表中是否增加 用户数据。

    social_auth_usersocialauth 数据表

     

    登录成功跳到首页,发现还处于未登录状态,我们需要对源码做修改

    social_core/actions.py

    原始代码 大约第100行左右 更改

    return backend.strategy.redirect(url)

    修改为

    修改源码适配drf

    from rest_framework_jwt.serializers import jwt_encode_handler,jwt_payload_handler

    response =  backend.strategy.redirect(url)
    payload = jwt_payload_handler(user)
    response.set_cookie('username',user.username,max_age=24*3600)
    response.set_cookie('user_id',user.id,max_age=24*3600)
    response.set_cookie('token',jwt_encode_handler(payload),max_age=24*3600)
    return response

    现在就登录后就正常了。qq和微信的登录,一样的操作,只要去开放平台注册应用,其它跟微博登录一样设置就可以了。

  • 相关阅读:
    PIE-Basic 自定义滤波
    PIE-Basic 常用滤波
    PIE-Basic 中值滤波
    PIE-Basic 均值滤波
    PIE-Basic 小波变换
    PIE-Basic 傅里叶变换
    PIE-Basic 去相关拉伸
    .net调用数据库执行Mysql存储过程,提示 Procedure or function XXXX Cannot be found in database xxx
    C#几种类型转换方法的个人总结
    Winform无法改变窗体大小
  • 原文地址:https://www.cnblogs.com/lvye001/p/10015699.html
Copyright © 2011-2022 走看看