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和微信的登錄,一樣的操作,只要去開放平台注冊應用,其它跟微博登錄一樣設置就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM