第四百零四節,python網站第三方登陸,social-auth-app-django模塊,html
social-auth-app-django模塊是專門用於Django的第三方登陸OAuth2協議模塊python
目前流行的第三方登陸都採用了OAuth2協議mysql
安裝sql
pip install -i https://pypi.douban.com/simple social-auth-app-django
依賴關係數據庫
PyJWT-1.5.3 certifi-2017.7.27.1 chardet-3.0.4 defusedxml-0.5.0 idna-2.6 oauthlib-2.0.4 python3-openid-3.1.0 requests-2.18.4 requests-oauthlib-0.8.0 six-1.11.0 social-auth-app-django-1.2.0 social-auth-core-1.4.0 urllib3-1.22
使用文檔 http://coding.imooc.com/lesson/131.html#mid=7393django
使用配置服務器
1.將social_django添加到app配置,settings.py微信
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app1', 'social_django', ]
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 配置數據庫引擎名稱 'NAME': 'jxiou', # 數據庫名稱 'USER': 'test_user', # 數據庫用戶名 'PASSWORD': 'test_user', # 數據庫密碼 'HOST': '127.0.0.1', # 數據庫連接地址,爲服務器ip 'PORT': '3306', # 數據庫端口 } }
2,輸入命令migrate來生成第三方登陸須要的表session
3.配置須要的第三方登陸模塊,settings.pyapp
第三方登陸模塊放在social_core插件下的backends目錄,裏面有不少第三方登陸模塊,好比,微信,微博,QQ等
# 設置要使用的第三方登陸 AUTHENTICATION_BACKENDS = ( 'social_core.backends.weixin.WeixinOAuth2', # 使用微信登陸 'social_core.backends.qq.QQOAuth2', # 使用QQ登陸 'django.contrib.auth.backends.ModelBackend', # 指定django的ModelBackend類 )
4.配置第三方登陸路由url
from django.conf.urls import url, include # 導入django自在的include邏輯 from django.contrib import admin from app1.views import alipaview urlpatterns = [ url(r'^admin/', admin.site.urls), # 支付寶返回url url(r'^alipa/', alipaview, name='alipa'), # 第三方登陸 url('', include('social_django.urls', namespace='social')) ]
5.配置 TEMPLATES,settings.py
配置這裏,當用戶登陸的時候,若是用戶不存在,會自動在用戶表建立用戶,而且關聯用戶信息
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', ], }, }, ]
使用第三方配置
# 設置要使用的第三方登陸 AUTHENTICATION_BACKENDS = ( 'social_core.backends.weibo.WeiboOAuth2', # 使用微博登陸 'social_core.backends.weixin.WeixinOAuth2', # 使用微信登陸 'social_core.backends.qq.QQOAuth2', # 使用QQ登陸 'django.contrib.auth.backends.ModelBackend', # 指定django的ModelBackend類 ) # 配置微博開放平臺受權 # SOCIAL_AUTH_要使用登陸模塊的名稱大小_KEY,其餘如QQ相同 SOCIAL_AUTH_WEIBO_KEY = '1359594035' SOCIAL_AUTH_WEIBO_SECRET = '7d33714722f4e5572c116ce2b2433a99' # 登陸成功後跳轉頁面 SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/index/'
配置後,啓動程序,根據url來構造請求地址和,回調地址
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
<a href="{% url "social:begin" "weibo" %}">微博登陸</a>
social_auth_usersocialauth 數據表裏就是管理用戶表的信息