python - Twitter / Tweepy OAuth - 如何保存 oauth_token 以在 REST API 设置中的回调中验证它
问题描述
我正在编写一个带有 REST API 设置的简单 Twitter 身份验证流程。客户端只是普通的 javascript/Vue 代码——没有服务器端渲染。这使用了一个使用 Django Rest Framework 构建的后端 REST API,使用 tweepy 库来包装 Twitter API。
我通过以下步骤进行身份验证:
- 用户单击“登录 twitter”按钮,这会触发对我的后端 API /get-url/ 的调用
- API 调用 Twitter 的 get_authorization_url(使用我的 Twitter 应用程序凭据),获取令牌,并将此重定向 URL 返回给客户端
- 客户端将用户重定向到 Twitter URL 以完成身份验证
- 在回调时,客户端将所有参数传递给后端 API 端点
- API获取token和secret;使用用户身份验证创建一个 tweepy API;并调用 verify_credentials
- 如果一切正常,我们在与 Twitter 用户绑定的 Django 数据库中创建一个用户帐户,存储他们的令牌和秘密;使用 JWT 登录用户;并使用令牌返回 200 成功。
- 前端处理 JWT 令牌刷新等;但否则将其用于 API 其余部分的身份验证。
但是,有一点我很难过:Twitter 文档建议在我的第 2 步中,我应该保存 request_token,以便在第 5 步中,我可以检查它是否与从 Twitter API 返回的内容相匹配(https:/ /developer.twitter.com/en/docs/authentication/guides/log-in-with-twitter )。
tweepy 文档示例(http://docs.tweepy.org/en/latest/auth_tutorial.html)建议将其存储在会话中,然后在回调时检查它们并从会话中删除。
但是,这在像我这样的 REST API 设置中没有意义(至少对我而言)。我不知道如何将它临时存储在服务器上,以便在回调时我可以检查它的值 - 在重定向之前,我对用户“绑定”这个令牌一无所知,没有用户记录可以存储在数据库。
我能想到的就是让(2)上的API将它返回给客户端;然后可以在重定向之前将其存储在cookie中;然后在回调时,将其传递回服务器......但这似乎非常复杂,并且我认为以纯文本方式完成所有操作会使执行此额外检查的价值无效。
希望我在这里遗漏了一些明显的东西。
解决方案
您是否尝试过使用python-social-auth库?
from_the_docs:推特在受支持的身份验证后端中。
推荐阅读
- ruby-on-rails - has_many 通过 Rails REST API 中的关联
- javascript - 未捕获的数组类型错误
- java - Java:需要查看输入字符串中的每个字符是否与“字母表”中的任何字符匹配
- c - 读取另一个参数后如何修复命令行参数更改?
- css - 如何暂停或延迟闪烁的文本动画,以便我的文本显示一小段时间?
- asp.net - Asp.Net CodeFirst 如何在 3 个模型之间导航?
- python - 将列表转换为python数组
- html - 如何在我的网站上操作此元素
- javascript - XMLHttpRequest 返回未定义的响应,但适用于 console.log
- mysql - 在mac终端中,如何查看mysql在哪个端口运行?