OAuth2.0 social_django微博第三方登錄


python網站第三方登錄,social-auth-app-django模塊,

social-auth-app-django模塊是專門用於Django的第三方登錄OAuth2協議模塊

目前流行的第三方登錄都采用了OAuth2協議

 

安裝:

 

pip install social-auth-app-django

 

 

settings.py配置:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    

    #第三方登錄
    'social_django',
]

 

 

 

下一步我們就要執行遷移:

 

python manage.py migrate

 

social開頭的就是我們生成的第三方表!

 

然后我們繼續settings.py配置:

配置這里,當用戶登錄的時候,如果用戶不存在,會自動在用戶表創建用戶,並且關聯用戶信息

 

 

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',
],
},
},
]

 

#在配置文件中告知Django使用我們自定義的認證后端
AUTHENTICATION_BACKENDS = [
    'users.utils.UsernameModelBackend',
'social_core.backends.weibo.WeiboOAuth2', #微博 'django.contrib.auth.backends.ModelBackend', #指定django的modelbackend 類
]

 

第三方參數配置:

# 用戶key
SOCIAL_AUTH_WEIBO_KEY = ''
# 用戶secret SOCIAL_AUTH_WEIBO_SECRET = ''
# 登陸后用戶跳轉的地址 SOCIAL_AUTH_LOGIN_REDIRECT_URL = 'http://127.0.0.1:8080/index.html'

配置主路由:

urlpatterns = [
    url('^xadmin/', xadmin.site.urls),
  

    # 第三方登錄
    url('', include('social_django.urls')),
]

下面我們還要配置回調URL:

在自己應用里的高級信息里,編輯授權回調頁http://127.0.0.1:8000/complete/weibo/,黃色箭頭指向的可以不填寫

 

最后登錄測試一下,看自己social_auth_usersocialauth表里是否有用戶

登錄成功跳到首頁,發現還處於未登錄狀態,我們需要對源碼做修改

我們要找到環境里的social_core目錄下的actions.py

然后在100行左右  把下面這行代碼

return backend.strategy.redirect(url)

修改為:

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("name", user.username if user.username else user.username, max_age=24 * 3600) response.set_cookie("token", jwt_encode_handler(payload), max_age=24 * 3600) return response

修改好后登錄之后就可以顯示用戶了!

 


免責聲明!

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



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