繁体   English   中英

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

[英]How can I use & set cookies whilst inside a Laravel queued Job, and why is my current solution failing?

我需要应用程序的一部分从核心应用程序的工作流中异步调用Reddit。 我使用在这里构建的Reddit API库实现了一个半可行的解决方案。 对于不知道的用户,Reddit 通过OAuth管理身份验证,并为特定用户返回承载和令牌,该令牌和令牌在生成后的60分钟内到期。

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

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

如上所述,正在使用的应用程序调用Reddit。 这些调用是由要处理的作业类创建的: UpdateRedditLiveThreadJob ,您可以在此处查看

这些作业由守护进程的Artisan队列工作人员使用Laravel Forge处理, 您可以在此处查看工作人员的详细信息 在这种情况下,队列驱动程序是Redis,工作程序由Supervisor监视。

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

  1. 将创建UpdateRedditLiveThreadJob并将其扔到要处理的队列中。
  2. 作业的handle()方法被调用。
  3. Reddit客户端被实例化,如果cookie不存在,则请求reddit令牌。
  4. 我的Reddit客户端成功与Reddit通信。
  5. 该作业被视为完成。

实际情况:

  1. 作业已创建。
  2. 句柄被称为。
  3. Reddit客户端被实例化, 一般在这里发生一些奇怪的事情
  4. Reddit客户端尝试进行通信,但是会收到一个401响应,该响应会产生异常。 这表明授权失败。
  5. 该任务被视为“失败”,并循环回到步骤2。

这是我的问题:

  1. 为什么该流在最初的一个小时内起作用,然后在假定cookie已过期之后如上所述如上所述崩溃了?

  2. 我已经尽力了解Laravel Queues的工作原理,但是从根本上来说,我很难概念化可用的各种类型的队列管理选项: queue:listenqueue:work ,守护queue:work在Supervisor上运行的守护进程等。 。我当前的队列基础结构与使用cookie来管理令牌兼容吗?

  3. 为了使应用程序按预期运行,我需要对代码库进行哪些调整?

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

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

如果我在这里描述不正确或需要澄清,请让我知道,我已经尽力简洁地解释了这个问题。

您的逻辑不正确。 队列作业实际上是运行php脚本的cli。 它与浏览器没有交互。 Cookies是在浏览器中设置的,请参阅此相关主题以供参考。

看到您正在与API交互时,将令牌设置为Job中的一个简单变量(或者最好是在该包装器中),然后在该Job中重新使用该令牌会更有意义。

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

我知道这不是您所有问题的完整答案,但这是朝着正确方向发展的推动力。 因为我会回答您所有的问题-最终-可能无法解决您的问题;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM