Python - social-auth-app-django 模塊 - 商城項目 第三方方式登陸 - 微博

開發準備

開通微博開發者權限

點擊這裏 進入 微博開放平臺html

開通後權限後建立應用 

建立網頁應用, 此處不須要進行審覈便可使用測試環境python

開發環境信息

此處一些信息是很重要的東西, 好比 App_key 以及 App_Serertmysql

配置互傳接口

回調頁面也進行設置, 以後要用此接口進行信息回傳git

文檔說明

基於 OAuth2.0 協議進行認證, 點擊此文檔github

重點接口

受權以及tokensql

受權接口使用

點擊這裏 官方說明數據庫

經過閱讀官方說明得知是 能夠以 get/post 方式進行請求. URL 的生成和支付寶相似, 可是不須要加密django

所以會簡單不少, 注意看必填字段便可api

生成請求地址

直接使用拼接便可生成 url 進行訪問微信

def get_auth_url():
    weibo_auth_url = "https://api.weibo.com/oauth2/authorize"
    redirect_url = "http://127.0.0.1:8000/complete/weibo/"
    auth_url = weibo_auth_url + "?client_id={0}&redirect_uri={1}".format("3470xxx2804", redirect_url)

    print(auth_url)

成功請求

根據生成的 url 訪問, 會跳轉到 微博提供的登陸受權頁面,而後登陸後

會跳轉到一個連接地址, 而且參數會提供一串 code 

Token接口使用

點擊這裏查看 官方文檔說明

查閱官方說明可見, 此接口方式必須是 post 方式且須要提供以前 受權接口拿到的 token 才能夠能夠進行使用

發送請求

利用 request 進行 post 的請求

def get_access_token(code="cbf6cccccccccccc6f8e7df1a9dd1c7"):
    access_token_url = "https://api.weibo.com/oauth2/access_token"
    import requests
    re_dict = requests.post(access_token_url, data={
        "client_id": "347nnnnn04",
        "client_secret": "836c9d55a8xxxxxxxa5e2d08b77c8c31bd1",
        "grant_type": "authorization_code",
        "code": code,
        "redirect_uri": "http://127.0.0.1:8000/complete/weibo/"
    })
    pass

請求回傳

請求回傳中能夠拿到一串認證信息 , 包括 uid,以及 access_token , 至此算是受權登陸成功, 基於這些信息才能夠進行其餘必須登陸後的訪問操做

 

測試受權後操做驗證

編寫一個訪問用戶信息的接口進行生成操做, 用戶信息接口官方文檔以下  點擊這裏

訪問成功後的回傳數據, 可見測試成功

social-auth-app-django 

別人造的輪子又大又圓

social-auth-app-django 組件已經集成好了咱們上面的那一堆繁瑣的操做

github 點這裏

官方文檔 點這裏

安裝

From pypi:

$ pip install social-auth-app-django
And
for MongoEngine ORM: $ pip install social-auth-app-django-mongoengine

註冊

Add the application to INSTALLED_APPS setting, for default ORM:

INSTALLED_APPS = (
    ...
    'social_django',
    ...
)

And
for MongoEngine ORM: INSTALLED_APPS = ( ... 'social_django_mongoengine', ... )

遷移初始化

更改數據庫引擎

使用 social-auth-app-django 組件必需要將數據庫的 引擎改成 innodb 否則會沒法使用

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "ytshop",
        'USER': 'root',
        'PASSWORD': "123456",
        'HOST': "127.0.0.1",
        'OPTIONS': {'init_command': 'SET storage_engine=INNODB;'}
    }
}

遷移數據表

此組件是帶有數據表的, 所以須要進行數據庫遷移,直接進行 migrate 便可, 源碼中自帶了 migrations 

./manage.py migrate

 遷移成功

增長了5張表

配置認證方式

在 settings.py 中配置第三方認證方式

social_core.backends 中涵蓋了全世界的主流的平臺, 包括知乎豆瓣等

AUTHENTICATION_BACKENDS = ('social_core.backends.weibo.WeiboOAuth2',   # 微博
    'social_core.backends.weixin.WeixinOAuth2',  # 微信
    'social_core.backends.qq.QQOAuth2',      # qq

    'django.contrib.auth.backends.ModelBackend',

)

 

配置 接口

urlpatterns = patterns('',
    ...
    url('', include('social_django.urls', namespace='social'))
    ...
)

 

配置模板

TEMPLATES = [
    {
        ...
        'OPTIONS': {
            ...
            'context_processors': [
                ...
                'social_django.context_processors.backends',
                'social_django.context_processors.login_redirect',
                ...
            ]
        }
    }
]

 

配置第三方平臺相關參數

SOCIAL_AUTH_TWITTER_KEY = 'foobar'
SOCIAL_AUTH_TWITTER_SECRET = 'bazqux'

 

配置參數須要進行更改, TWITTER 改爲對應平臺的大寫

以微博爲例 須要輸入 key 以及 Secret

 

SOCIAL_AUTH_WEIBO_KEY = '34XXXXX2804'
SOCIAL_AUTH_WEIBO_SECRET = '836c9d55a88XXXX77c8c31bd1'

 

配置登陸成功回調路徑

# 第三方登陸後自動跳轉
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/index/'

 

rest-framework 時特殊配置

django 和  rest-framework  的登陸流程有所不一樣, 

 social-auth-app-django 對 django 的兼容性更好一些,可是對DRF 有所不一樣

須要進行必定程度的處理, 存放進去用戶以及相關的 token

修改位置

須要作手腳的是下圖中的部分

 

最後返回的時候將此代碼進行更改成下面的代碼

 # return backend.strategy.redirect(url)

修改代碼

from rest_framework_jwt.serializers import jwt_payload_handler, jwt_encode_handler
    payload = jwt_payload_handler(user)
    reponse = backend.strategy.redirect(url)
    reponse.set_cookie("name", user.name if user.name else user.username, max_age=24 * 3600)
    reponse.set_cookie("token", jwt_encode_handler(payload), max_age=24 * 3600)
    return reponse
相關文章
相關標籤/搜索