Django REST framework+Vue 打造生鮮超市(十三)

weixin_34162629發表於2018-04-21

目錄

生鮮超市(一)    生鮮超市(二)    生鮮超市(三)   

生鮮超市(四)    生鮮超市(五)    生鮮超市(六)   

生鮮超市(七)    生鮮超市(八)    生鮮超市(九)   

生鮮超市(十)    生鮮超市(十一)    生鮮超市(十二)    生鮮超市(十三)   

程式碼下載

github

十四、social_django 整合第三方登入

14.1.申請應用

 進入微博開放平臺,首先要經過認證,然後才可以建立應用

 地址:http://open.weibo.com/authentication

建立應用

 

寫上應用的名字,建立好後,會有個“App Key”,這個非常重要

 

 OAuth2.0 授權設定

正常情況下,必須經過稽核才可以讓第三方登入,我們可以先用測試模式來完成。

(1)新增測試使用者,可以測試登入

 (2)高階資訊

 

 

 14.2.第三方登入

我們用social_django第三方庫來實現第三方登入

github地址,上面有使用說明

https://github.com/python-social-auth/social-app-django

(1) 安裝

pip install social-auth-app-django

 (2)INSTALL_APP中配置

'social_django',

(3)生成表

只需要做migrate,因為migration的檔案已經生成好了

 python manage.py migrate

可以看到資料庫中多了五張表

 

(4) 新增到AUTHENTICATION_BACKENDS中

settings

# 設定郵箱和使用者名稱和手機號均可登入
AUTHENTICATION_BACKENDS = (
    'users.views.CustomBackend',
    'social_core.backends.weibo.WeiboOAuth2',
    'social_core.backends.qq.QQOAuth2',
    'social_core.backends.weixin.WeixinOAuth2',
    'django.contrib.auth.backends.ModelBackend',
)

(5)配置url

# 第三方登入
    path('', include('social_django.urls', namespace='social'))

 (6)settings裡面context_processors

對於template中的用法,向context_processors中加入下面兩個

  'social_django.context_processors.backends',
  'social_django.context_processors.login_redirect',

(7)介面

  在微博開放平臺裡面設定回撥url,除錯的時候設定成本地的就可以了,上線的時候改成伺服器的ip地址

 

 (8)APP Secret和App key配置,settings裡面

# 第三方登入,裡面的值是你的開放平臺對應的值
SOCIAL_AUTH_WEIBO_KEY = 'xxxxxxx'
SOCIAL_AUTH_WEIBO_SECRET = 'xxxxxx'

SOCIAL_AUTH_QQ_KEY = 'xxxxxxx'
SOCIAL_AUTH_QQ_SECRET = 'xxxxxxx'

SOCIAL_AUTH_WEIXIN_KEY = 'xxxxxxx'
SOCIAL_AUTH_WEIXIN_SECRET = 'xxxxxxx'

 

 現在瀏覽器訪問:http://127.0.0.1:8000/login/weibo,就可以登入了,我們還需要設定使用者微博登入成功後跳轉到首頁

#登入成功後跳轉到首頁
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/index/'

(9)修改原始碼

登入成功跳到首頁,發現還處於未登入狀態,我們需要對原始碼做修改

social_core/actions.py

原始程式碼

return backend.strategy.redirect(url)

修改為

# 修改原始碼適配drf
    response = backend.strategy.redirect(url)
    payload = jwt_payload_handler(user)
    response.set_cookie("name",user.name if user.name else user.username, max_age=24*3600)
    response.set_cookie("token", jwt_encode_handler(payload), max_age=24*3600)
    return response

現在就登入後就正常了。qq和微信的登入,一樣的操作,只要去開放平臺註冊應用,其它跟微博登入一樣設定就可以了。

 

相關文章