【问题标题】:Run Flask alongside PHP [sharing session]与 PHP 一起运行 Flask [分享会]
【发布时间】:2016-03-19 21:03:51
【问题描述】:

正如标题所说,我正在尝试将 Flask 与 PHP 应用程序一起运行。

它们都在 Windows 平台的 Apache 2.4 下运行。对于 Flask,我使用的是 wsgi_module。

Flask 应用实际上是一个 API。 PHP 应用程序控制用户登录,因此用户访问 API。请记住,我不能放弃使用 PHP 应用程序,因为它控制的功能远不止日志功能 [发票、访问日志等]。

流程是:

  1. 用户通过 PHP 应用登录
  2. PHP 将用户数据存储到数据库中[用户 ID 和一个指示用户是否登录的标志]
  3. 用户向 Flask API 发出请求
  4. Flask 检查用户数据是否在数据库中:如果没有,则重定向到 PHP 登录页面,否则让用户使用 Flask API。

我知道在第 2 步和第 3 步之间,PHP 必须与 Flask 共享一个会话变量 cookie [用户 ID],以便 Flask 应用程序检查用户是否已登录。

无论我尝试什么都失败了。我无法将 PHP 会话变量传递给 Flask。

我知道我不能将 PHP 变量传递给 Flask,但我不确定。

有人试过类似的吗?

我应该对上述设置实施什么样的用户登录策略?

【问题讨论】:

    标签: php python session flask


    【解决方案1】:

    我不确定这是否是您正在寻找的答案,但我不会尝试让 Flask API 从 PHP 访问会话数据。会话和 API 不能很好地结合在一起,设计良好的 API 不需要会话,而是 100% 无状态。

    我要提议的是假设 PHP 和 Flask 都可以访问用户数据库。当用户登录 PHP 应用程序时,为用户生成一个 API 令牌。这可以是一个随机的字符序列,一个 uuid,任何你想要的,只要它是唯一的。将令牌以及到期日期(如果您愿意)写入用户数据库。登录过程应该将该令牌传递回客户端(当然使用 https://)。

    当客户端需要进行 API 调用时,它必须在每个请求中发送该令牌。例如,您可以将其包含在 Authorization 标头中,也可以使用自定义标头。 Flask API 获取令牌并在用户数据库中搜索它。如果找不到令牌,则返回 401。如果找到令牌,它现在就知道用户是谁,而无需与 PHP 共享会话。对于 API 端点,您将从令牌中查找每个请求的用户。

    希望这会有所帮助!

    【讨论】:

    • 感谢您的回复。我不管理的部分是“将令牌传递回客户端”。我的 Flask API 根本无法从客户端获取令牌。
    • PHP 需要在客户端登录时将令牌传递给客户端。然后客户端在发送的每个请求中将其传递回 API。
    • “然后客户端将其传递回 API……”这就是问题所在。我已经尝试了很多东西。我无法将令牌从客户端传递到 API。
    • 为什么不呢?这是什么客户?浏览器?
    • 浏览器在Ajax请求的Authorization头中发送。查看我的博客文章以获取工作示例:blog.miguelgrinberg.com/post/writing-a-javascript-rest-client
    猜你喜欢
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多