social_core 第三方登陸「微信」不存儲nickname的解決方案

問題python

使用social_core過程當中,存儲的username一直都是一串字符串,而並不是是微信的username,
後來仔細研究一下才明白,username就至關於id,屬於惟一字符串,因此也就不是直接將微信
的暱稱copy過來座位username,那麼就只能使用其餘字段來記錄微信暱稱。

#就這點東西研究了三個小時,我也是醉醉的,看別人的代碼真是很難,
#要看懂功能、邏輯、調用關係、哪裏入庫、那裏攔截

這裏使用的是nickname。
下圖中,第一條是沒有加nickname以前,username我修改過,否則就仍是一串字符串
       第二條的nickname已經經過微信加載進來了

clipboard.png

解決方案:
social_core、social_django 源碼只獲取useranme一個字段,因此這裏要添加一下git

方案1:失敗的,應該是數據的結構問題,沒有太多時間去處理,看到失敗,就沒有繼續下去github

修改 social_core/pipeline/user.py 頂部的 USER_FIELDS
   原:USER_FIELDS = ['username', 'email']
   修改後:USER_FIELDS = ['username', 'email', 'nikename']
因爲最後出現的數據結構相似於
    {"username":"830912830192","response":{"nickname":"小喵喵"}}
    nickname和username根本就不在同一級別。 # user.py  create_user  fields

方案2:測試成功django

# 固然我知道這樣直接改源碼的方式不太好可是暫時能夠用了,後續再看怎麼改一下吧
修改 social_core/pipeline/user.py create_user
    在fields下方添加以下代碼
        #add by shen 2017-11-15 03:18:29
        nick_dict =  kwargs.get('response')
        fields['nick_name'] = nick_dict.get('nickname',None)

social_core github:https://github.com/python-soc...微信

相關文章
相關標籤/搜索