【Django】Oauth登录过程中,如何登录该OAuth的用户。
已经获取到weibo的token,但是在绑定weibo用户和本地帐号,不知道怎么处理.
问题:
使用已绑定的weibo帐号,如何实现登录该帐号?Django自带的authenticated()/login()来登录,但是这django会限制。所以 需要怎么做才比较好。
我用得django框架, 目前的代码逻辑:
使用weibo帐号首次登录:
访问weibo, OAuth callback后,会绑定帐号: 检查uid是否已存在。若不存在,我会调用User创建instance. 然后跳转到注册页面,让用户输入密码,完成绑定。
当该用户完成绑定帐号后,再次使用weibo帐号登录。 callback后,检查uid是存在的,此时登录该账户:从 数据库中 User表中,取出绑定的web帐号. 然后使用Django自带的authenticated()/login() —— django.contrib.auth.init.py文件中的 —— 来登录,
===============================================================
在stackoverflow找到了解答(http://stackoverflow.com/questions/5775268/django-1-2-session-loss-so-hasnt-answered-this-question-successfully-yet).
user.backend='django.contrib.auth.backends.ModelBackend'
重新设置用户的'backend'属性,然后就可以使用login()函数登录该用户。
不过还是不知其所以然。 希望可以知道这么做的原因。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用pdb跟了遍源码,知道了原因。
在文件 django.contrib.auth.init.py文件中,
authenticate()函数: 将普遍意义的authonrize(授权)和authenticate(用户密码核查)的事都做了. 同时赋予User实例一个新的属性backend. 这个backend的值在缺省状态下就是'django.contrib.auth.backends.ModelBackend'。
login()函数: 则是更新了session,来标记用户. 同时,使用上述的backend属性来更新session。
这样,就完成整个用户登录及其持久化.
关于backend的具体值,参考django官方文档: