social_core 第三方登录“微信”不存储nickname的解决方案

问题

使用social_core过程中,存储的username一直都是一串字符串,而并非是微信的username,
后来仔细研究一下才明白,username就相当于id,属于唯一字符串,所以也就不是直接将微信
的昵称copy过来座位username,那么就只能使用其他字段来记录微信昵称。

#就这点东西研究了三个小时,我也是醉醉的,看别人的代码真是很难,
#要看懂功能、逻辑、调用关系、哪里入库、那里拦截

这里使用的是nickname。
下图中,第一条是没有加nickname之前,username我修改过,不然就还是一串字符串
       第二条的nickname已经通过微信加载进来了

《social_core 第三方登录“微信”不存储nickname的解决方案》

解决方案:
social_core、social_django 源码只获取useranme一个字段,所以这里要添加一下

方案1:失败的,应该是数据的结构问题,没有太多时间去处理,看到失败,就没有继续下去

修改 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:测试成功

# 当然我知道这样直接改源码的方式不太好但是暂时可以用了,后续再看怎么改一下吧
修改 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…

    原文作者:沈弋
    原文地址: https://segmentfault.com/a/1190000012009970
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞