在上一篇文章中,你們應該對驗證與受權有了必定的認識,可是對於一些小型網站,本身維護一個用戶系統有些多餘,而且每每用戶也不肯意經歷麻煩的流程在小網站註冊一個帳戶。這是很OAuth
就顯得頗有用了,如今不少網站都會有QQ登陸、微信登陸等,很是方便,可是對於先後端分離的項目,使用OAuth
會與傳統流程有些不一樣,這篇文章How to Integrate OAuth 2 Into Your Django/DRF Back-end Without Going Insane講解地很詳細,建議你們去看看。前端
針對Django REST framework
已經有人爲咱們封裝了一個很是易用的庫,能夠經過pip
下載:python
$ pip install django-rest-framework-social-oauth2
別忘了在安裝前激活虛擬環境,安裝完後,打開backend/settings.py
文件,註冊應用:git
INSTALLED_APPS = ( # ... 'oauth2_provider', 'social_django', 'rest_framework_social_oauth2', )
同時修改backend/urls.py
:github
urlpatterns = [ # ... path('auth/', include('rest_framework_social_oauth2.urls')), ]
其它配置:django
TEMPLATES = [ { # ... 'OPTIONS': { 'context_processors': [ # ... 'social_django.context_processors.backends', 'social_django.context_processors.login_redirect', ], }, }, ] REST_FRAMEWORK = { ... 'DEFAULT_AUTHENTICATION_CLASSES': ( # ... 'oauth2_provider.contrib.rest_framework.OAuth2Authentication', 'rest_framework_social_oauth2.authentication.SocialAuthentication', ), } AUTHENTICATION_BACKENDS = ( 'social_core.backends.github.GithubOAuth2', 'rest_framework_social_oauth2.backends.DjangoOAuth2', 'django.contrib.auth.backends.ModelBackend', )
官方示例給了使用Facebook
和Google
的示例,可是因爲衆所周知的緣由,這兩個網站並不不存在,咱們仍是使用全球最大同性交友網站Github吧。完成上述配置後,咱們去設置Github
,註冊咱們的app。後端
登陸Github後,點擊頭像,進入settings
中,選擇OAuth APP
並添加,設置如圖:微信
關於這裏兩個URL
的設置咱們稍後再討論,如今先這樣填寫。保存後你會獲得一個Client ID
和一個Client Secret
,將它們寫入配置文件:app
SOCIAL_AUTH_GITHUB_KEY = '你的ID' SOCIAL_AUTH_GITHUB_SECRET = '你的密鑰'
別忘了要執行python manage.py migrate
,爲了測試,咱們須要打開Django
自帶的管理後臺。前後端分離
選擇Applications
並添加,記住這裏得到的id
和secret
,等下會用到,爲了在下文與Github
上的區分,把這裏的稱爲id2
與secret2
。爲了測試,讓咱們進入Github
設置:curl
選擇左上角的Generate new token
來建立一個測試用的token
。
如今咱們能夠來測試了,運行Django
,使用命令行工具curl
測試:
$ curl -X POST -d "grant_type=convert_token&client_id=你的id2&client_secret=你的secret2&backend=github&token=測試token" http://localhost:8000/auth/convert-token // 返回的數據 {"access_token":"mNZziADXruf1ZfmVtk9m5gviAE491U","expires_in":36000,"token_type":"Bearer","scope":"read write","refresh_token":"kVt09izTo2UijhnMtb5ed3BcqE5j8h"}
接下來在前端的每次請求都使用獲得的access_token
就行啦,這時候你打開管理後臺也會看到新增長了一個用戶,帳戶名就是你的Github帳戶名。另外還有關於刷新、刪除Token等操做,能夠去看這個庫的文檔,就不過多介紹了。
目前咱們只講瞭如何在取得Github
的Token的狀況下,向Django
後端交換Token,用來作用戶驗證,可是關於前端如何獲取Github
的Token,以及先後端如何配合,如何共享登陸狀態尚未講,這些內容因爲涉及到的知識點較多,就留到後面再介紹啦。
歡迎關注個人公衆號「公子政的宅平常」,原創技術文章第一時間推送。