Django+React全棧開發:OAuth(後端部分)

OAuth

在上一篇文章中,你們應該對驗證與受權有了必定的認識,可是對於一些小型網站,本身維護一個用戶系統有些多餘,而且每每用戶也不肯意經歷麻煩的流程在小網站註冊一個帳戶。這是很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.pygithub

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',
)

Github登陸

官方示例給了使用FacebookGoogle的示例,可是因爲衆所周知的緣由,這兩個網站並不不存在,咱們仍是使用全球最大同性交友網站Github吧。完成上述配置後,咱們去設置Github,註冊咱們的app。後端

添加app

登陸Github後,點擊頭像,進入settings中,選擇OAuth APP並添加,設置如圖:微信

OAuth APP

關於這裏兩個URL的設置咱們稍後再討論,如今先這樣填寫。保存後你會獲得一個Client ID和一個Client Secret,將它們寫入配置文件:app

SOCIAL_AUTH_GITHUB_KEY = '你的ID'
SOCIAL_AUTH_GITHUB_SECRET = '你的密鑰'

別忘了要執行python manage.py migrate,爲了測試,咱們須要打開Django自帶的管理後臺。前後端分離

管理後臺

選擇Applications並添加,記住這裏得到的idsecret,等下會用到,爲了在下文與Github上的區分,把這裏的稱爲id2secret2。爲了測試,讓咱們進入Github設置:curl

測試token

選擇左上角的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,以及先後端如何配合,如何共享登陸狀態尚未講,這些內容因爲涉及到的知識點較多,就留到後面再介紹啦。


歡迎關注個人公衆號「公子政的宅平常」,原創技術文章第一時間推送。

二維碼

相關文章
相關標籤/搜索