OAuth(開放受權 Open Authorization)是一個開放標準,容許用戶受權第三方網站訪問他們存儲在另外的服務提供者上的信息,而不須要將用戶名和密碼提供給第三方網站或分享他們數據的全部內容。 python
今天我要用到的這個第三方插件也是基於OAuth2.0協議的。git
1、安裝github
pip install social-auth-app-django數據庫
2、github配置django
進入github,選擇settings=>Developer-settings,而後選擇OAuth Apps=>New OAuth App。最終以下圖:session
填寫全部的信息,好比上面那樣,點擊Register application後會跳轉到這個頁面,咱們會看到所須要的ID和cilent:app
這樣咱們就建立成功一個github的接口了,記住這兩個重要的信息。網站
3、django項目settings.py中配置url
1 INSTALLED_APPS = [ 2 'account', 3 'django.contrib.admin', 4 'django.contrib.auth', 5 'django.contrib.contenttypes', 6 'django.contrib.sessions', 7 'django.contrib.messages', 8 'django.contrib.staticfiles', 9 'social_django', # 新增 10 ] 11 ... 12 TEMPLATES = [ 13 { 14 'BACKEND': 'django.template.backends.django.DjangoTemplates', 15 'DIRS': [os.path.join(BASE_DIR, 'templates')] 16 , 17 'APP_DIRS': True, 18 'OPTIONS': { 19 'context_processors': [ 20 'django.template.context_processors.debug', 21 'django.template.context_processors.request', 22 'django.contrib.auth.context_processors.auth', 23 'django.contrib.messages.context_processors.messages', 24 'social_django.context_processors.backends', # 新增 25 'social_django.context_processors.login_redirect', #新增 26 ], 27 }, 28 }, 29 ] 30 ... 31 32 AUTHENTICATION_BACKENDS = ( 33 'social_core.backends.github.GithubOAuth2', 34 'django.contrib.auth.backends.ModelBackend', 35 ) # 新增 36 37 SOCIAL_AUTH_URL_NAMESPACE = 'social' # 新增 38 39 # 填寫Github中獲取到的KEY和SECRET 40 41 SOCIAL_AUTH_GITHUB_KEY = xxxxxxxxxxxxxxxxxxxxxx' 42 SOCIAL_AUTH_GITHUB_SECRET = 'xxxxxxxxxxxxxxxxxxxxxx' 43 SOCIAL_AUTH_GITHUB_USE_OPENID_AS_USERNAME = True 44 45 # 登錄成功後的回調路由 46 SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/' # 登錄成功以後的路由
4、同步數據庫spa
命令:python manage.py migrate
5、修改settings.py同級目錄下的urls.py文件
1 urlpatterns = [ 2 ... 3 path('login/github/', include('social_django.urls', namespace='social')), 4 ]
6、template模板文件修改
1 <div> 2 <span>第三方帳號登陸:</span> 3 <a href="{% url 'social:begin' 'github' %}" title="Github登陸"> 4 <img src="/static/git.jpg" style="width: 32px; height: 32px;" alt="git登陸"> 5 </a> 6 </div>
查看結果:
最終結果就大功告成啦。