我该如何使用&在Laravel排队的工作中设置cookie,为什么我当前的解决方案失败?

时间:2016-02-24 10:36:06

标签: php laravel cookies queue reddit

我需要部分应用程序从我的核心应用程序的工作流程中异步调用Reddit。我已经使用我构建的here的Reddit API库实现了一个半可行的解决方案。对于那些不知道的人,Reddit manages authentication via OAuth并为特定用户返回一个持有者和一个令牌,该用户将在生成后的60分钟内到期。

我选择使用Cookie来存储上述时间段内的授权信息,如requestRedditToken() method here中所示。如果在需要向Reddit发出另一个请求时未找到cookie(即它已过期),则会生成另一个reddit令牌。 这似乎可以正常工作

我遇到的问题是概念化与守护队列工作程序集成时如何处理cookie,此外,我需要了解为什么这些调用会定期失败

如上所述,我正在使用的应用程序会调用Reddit。这些调用由正在处理的作业类创建:UpdateRedditLiveThreadJob,您可以see here

这些作业由守护Artisan队列工作人员使用Laravel Forge you can see the details of the worker here处理。在这种情况下,队列驱动程序是Redis,工作人员由Supervisor监控。

以下是我的应用程序的预期工作流程:

  1. 创建UpdateRedditLiveThreadJob并将其投入队列进行处理。
  2. 调用作业的handle()方法。
  3. 实例化Reddit客户端,如果cookie不存在则请求reddit令牌。
  4. 我的Reddit客户端成功与Reddit通信。
  5. 工作被视为完成。
  6. 实际发生了什么:

    1. 创建了这份工作。
    2. 处理句柄。
    3. Reddit客户端已实例化,此处发生奇怪的事情
    4. Reddit客户端尝试进行通信,但获得401响应,产生异常。这表示授权失败。
    5. 任务被认为是失败的'并循环回到第2步。
    6. 以下是我的问题:

      1. 为什么这个流程在第一个小时起作用,然后如上所述崩溃,假设cookie已经过期了?

      2. 我已尽力了解Laravel Queues的工作原理,但我基本上很难概念化不同类型的队列管理选项:queue:listen,{{1} },在Supervisor上运行的守护进程queue:work等。我当前的队列基础结构是否与使用cookie管理令牌兼容?

      3. 我需要对代码库进行哪些调整才能使应用按预期运行?

      4. 我的工作流程如何处理多个用户,每个用户可能有多个Cookie?

      5. 如果我重新启动队列工作程序,为什么工作流会神奇地重新开始工作?

      6. 如果我在这里错误地描述任何内容或需要澄清,请告诉我。我已尽力简洁地解释问题。

1 个答案:

答案 0 :(得分:1)

你的逻辑错误。队列作业实际上是一个运行php脚本的cli。它没有与浏览器的交互。 Cookie在浏览器中设置,请参阅this related thread以供参考。

看到你与API进行交互,将令牌设置为Job中的一个简单变量(或者更好地在该包装器中)然后在该作业中重复使用它会更有意义。

  

TL:DR:你的包装器不是API客户端。

我知道这不是你所有问题的完整答案,但它是朝着正确方向发展的。因为我能回答你所有的问题 - 最终 - 可能没有给你的问题任何解决方案;)