django 中 Oauth2 實現第三方登陸
阿新 • • 發佈:2018-11-28
這裡我們用的是微博開放平臺,QQ和微信開發平臺稽核比較嚴格
微博設定開發平臺連結 http://open.weibo.com/index.php
微博設定開發平臺測試應用
https://blog.csdn.net/weixin_43335187/article/details/84580175
流程圖
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
注意新生成的五個socual_auth開頭的表
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 類 ]
配置主路由:
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 資料表