【Django】Oauth登录过程中,如何登录该OAuth的用户。

发布于 2022-08-27 12:27:27 字数 1046 浏览 16 评论 0

已经获取到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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

柒夜笙歌凉 2022-09-03 12:27:27

使用pdb跟了遍源码,知道了原因。

在文件 django.contrib.auth.init.py文件中,
authenticate()函数: 将普遍意义的authonrize(授权)和authenticate(用户密码核查)的事都做了. 同时赋予User实例一个新的属性backend. 这个backend的值在缺省状态下就是'django.contrib.auth.backends.ModelBackend'。
login()函数: 则是更新了session,来标记用户. 同时,使用上述的backend属性来更新session。
这样,就完成整个用户登录及其持久化.

关于backend的具体值,参考django官方文档:

Behind the scenes, Django maintains a list of “authentication backends” that it checks for authentication. When somebody calls django.contrib.auth.authenticate() – as described in How to log a user in – Django tries authenticating across all of its authentication backends. If the first authentication method fails, Django tries the second one, and so on, until all backends have been attempted.

The list of authentication backends to use is specified in the AUTHENTICATION_BACKENDS setting.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文