请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

social auth微博第三方登录账号绑定机制?

这一块儿有5个问题,希望老师能分开解答,感谢!

1、默认绑定的都是id为1的用户,事先已经将微博平台,微博以及项目都退出了,这是怎么回事?

2、授权这一步输入微博账号密码是可以的,但是微博如果用二维码扫描的形式登录,程序中调用微博API时会报400错误,显示传入的code有问题?

3、用微博登录之后,设置了cookie过期时间,左上角点击退出,刷新进首页后还是会显示是登录状态,即使换一个用户登录项目首页,再进入首页也还是之前微博登录绑定的用户,为什么会出现这种cookie没有删除掉的情况?按道理不是和普通的登录方式一样,退出时就删除了本地的token了么?

4、项目中修改social-core源码时把源码拷贝到extra_app中,这种情况下再social-django调用时是如何直接就找到extra_app下的源码?为什么这时候运行的代码就不是虚拟环境中安装的?

5、如果一切正常,第三方登录时系统中没有对应用户,会自动创建一个,这个用户的默认密码是什么?可以自行配置么?



问题1已解决:

不能只从首页退出,需要从xadmin退出,social_django默认用的登录方式是session,页面退出并没有真正的从后台退出


问题2已解决:

本地调试时可能由于网络原因,扫码登录后浏览器会多起调用回调接口,而每一个code只能获取一次access_token,第二次之后都会验证失败,部署到服务器上之后不存在这个问题了

正在回答

1回答

你这些问题提的都很好, 你这里已经解决了第一个和第二问题,我就从第三个问题开始说吧:

3. 第三方的登录对前后端分开部署的方式来说一直都很麻烦, 很多解决方案是是使用iframe隐藏的方式来登录, 因为第三方登录一定是 要跳转到第三方的登录页面才能做,这里有一个很重要的点就是后端返回页面设置的cookie, 前端js是没有权利删除的, js只能删除自己设置的cookie, 这个是浏览器基于安全的考虑设置的权限, 所有后端设置token到cookie的时候第一要设置一个很短的时间, 第二要设置和js中使用的token名字不一样的值, 然后到前端页面初始化的时候 js可以读取这个预先设置的值然后马上自己写入一个token,这样原来的cookie因为设置的时间过短就会马上失效, 所以你这里无法退出 你就可以通过浏览器查一下cookie中设置的token的情况 是不是没有被删除掉

4. social-core源码时把源码拷贝到extra_app 是因为python的路径搜索机制实现的, 只要在settings文件中设置了 sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps'))
 这样python搜索包的时候就会优先搜索自己设置的路径, 所以python能找到这里, 实际上放到这里和直接用pip安装是一样,放到这里是考虑到因为我们会修改social-core的源码 如果使用pip安装 就无法达到使用我们修改后的源码的目的, 所以如果你要修改源码 就一定要放到自己的包里面

5. 第三方登录默认设置的用户你是无法自己去拥有账号的,除非你关联用户, 至于如何让用户第三方账号的登录以后强制关联用户你可以看一下官方文档,我个人不建议这样做,因为这样体验很不好, 你自己如果使用过第三方登录的话也会知道 你是用微博登录的 如果平台没有一开始让你强制绑定系统用户,后面你也只能使用微博登录, 其实我觉得这样并没有什么不方便的地方

0 回复 有任何疑惑可以回复我~
  • 提问者 烈焰卡卡 #1
    感谢老师的回答, 第3个问题,我理解的一个当前项目比较合理的一个解决方案就是我们后端设置另外两个cookies,比如说name1和token1,前端js中增加相应的代码,查看到有这两个cookies时就取出来再重新赋予name和token,后端设置的cookies让过期时间很短,这样来实现登录和退出的机制,是这个意思么
    回复 有任何疑惑可以回复我~ 2018-08-08 14:30:13
  • bobby 回复 提问者 烈焰卡卡 #2
    是的, 是这样的
    回复 有任何疑惑可以回复我~ 2018-08-10 10:38:03
  • 提问者 烈焰卡卡 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-08-10 11:20:33
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信