问题标签 [plack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
435 浏览

perl - 如何使用 Perl 进行身份验证和会话管理?

我正在尝试创建命令行界面,我需要在其中使用 perl(在 Perl 中使用来自 Plack 的 Starman )在用户(客户端)和身份验证服务器之间执行身份验证和会话管理。

在成功认证后执行安全认证和会话管理的基本步骤应该是什么?

我尝试了以下步骤 -

1- 用户在客户端输入他的用户名和密码
2- 客户端将对凭据进行编码并将其发送到身份验证服务器
3- 身份验证服务器将验证来自 auth-database 的用户凭据并生成使用用户名加盐的会话密钥(令牌)及其登录类型
4- 成功验证后,此会话密钥(令牌)将被发送回客户端(用户),否则将发送 undef 并且客户端将抛出“无效用户错误”
5-此令牌将随每个发送来自客户端的命令和具有命令定义的服务器(不是 aut-server)将验证令牌并允许基于验证执行命令
6-现在服务器有用户的登录时间和到期时间(比如2小时),所以auth服务器会继续检查用户是否已经过了到期时间,如果是,那么将用户带到登录提示符。

请就上述实施提供您的反馈和建议。

0 投票
2 回答
499 浏览

perl - 您如何将 Plack::Middleware::Session 与 Starman 服务器一起使用?

我有一个基于 Starman 的服务器 -

我自己的中间件“身份验证”对用户进行身份验证并返回会话信息(到期时间、会话密钥等)用于会话管理,那么我如何在会话中间件中使用这些信息?

0 投票
1 回答
942 浏览

perl - 如何为 Plack::Middleware::Session 管理的 cookie 设置过期时间?

现在我的app.psgi包含(简化):

后来,在$app我使用:

它工作正常,例如:

  • 当用户登录时,我将他的名字存储在服​​务器端存储的会话文件中,并且Plack::Middleware::Session设置了一个简单的会话状态cookie,
  • 并且当用户关闭浏览器时,cookie 会被自动清除(因为Plack::Session::State::Cookie默认没有为 cookie 设置任何过期时间)。

现在,我想在我的登录面板中实现“记住我”功能。在这种情况下,不应从浏览器中自动删除 session-state-cookie。这可以通过使用Plack::Session::State::Cookieexpires中的方法来完成。

问题:

如何我的$app. 换句话说,如何在这里调用 expire 方法:

如果有人需要,这是一个工作示例。

0 投票
2 回答
181 浏览

perl - 如何在 app.psgi 中获取有关自身的信息?

拥有任何基于 PSGI 的应用程序,例如以下app.psgi代码段

如何发现有关运行服务器的一些信息?例如,当运行app.psgi为:

将设置并打印$port- 6000。

在里面$app很容易,因为我可以访问$env. 但我想在调用$port 之前$app得到,例如上面的例子在每个请求时打印端口 - 但我想在开始运行$port之前得到一次。$app

编辑

是的,我必须知道例如服务器可以侦听更多端口,并且在请求到达某些端口时定义了确切的端口。

我想获得监听端口。

但是根据评论和回答,这里可能没有针对不同服务器实现(Starman、Twiggy)的任何统一 API 来获取监听端口。

问题背后的真正原因是我想向 Bonjour (Zeroconf) 宣传这些应用程序。(我还不知道如何(还),但有必要知道应用程序正在侦听哪个端口。)

现在我也意识到,将命令本身包装到一些代码中会更容易plackup,例如runserver.pl- 并且会知道我将用来运行plackup命令的端口。;)

0 投票
0 回答
223 浏览

perl - 如何将 Plack 身份验证与 Session 中间件一起使用?

我有自己的书面中间件,称为身份验证和会话,其中身份验证中间件生成会话密钥并在成功身份验证后将会话信息保存在 cookie 中。

现在使用上面的 cookie 会话中间件提取会话信息并实现会话管理。

但不知何故,我无法序列化上述中间件,这样我就可以在 Session 中间件中获取 Authentication 中间件创建的 cookie。

我试图构建它们如下 -

身份验证中间件简单地将用户验证到某个数据库,并在成功时生成会话密钥并将其保存在 cookie 中。

会话中间件看起来像 -

我调用中间件有什么问题吗?

0 投票
1 回答
351 浏览

perl - 如何使用 Plack 和 Mojolicious 避免 502 响应?

我已经设置了一个小型 Mojolicious 应用程序在 Plack 后面运行,充当这样的代理:

我需要以这种方式运行它(而不是直接安装应用程序),因为我需要每天重新加载应用程序几次,因为我无法进入这里。

该应用程序在 hypnotoad 上运行,当我直接点击它时,一切都很好。但是,当通过 plack 代理访问时,我经常收到 502 响应 - Gateway error: Connection timed out

有趣的是,当我重新加载一两次时,一切似乎都很好,并且我得到了正确的响应。

任何人都可以帮助解决这个问题吗?

0 投票
3 回答
559 浏览

perl - 在 Plack 中发送无缓冲响应

我正在创建一个大型 CSV 响应的 Perl 模块的一部分。服务器在 Plack 上运行,我对它远非专家。

目前我正在使用这样的东西来发送响应:

但是,该query_data函数不是一个快速的函数,并且会检索很多记录。在那里,我只是将每一行连接起来$body,并且在处理完所有行之后,发送整个响应。

我不喜欢这个有两个明显的原因:首先,它需要大量的 RAM 直到$body被销毁。其次,在该方法完成工作并实际发送响应之前,用户看不到响应活动$res->body($body)

我试图在文档中找到答案,但没有找到我需要的东西。

我也尝试调用$res->body($row_object->to_csv)我的回调部分,但似乎最终只发送我最后一次调用$res->body,覆盖所有以前的调用。

有没有办法发送一个 Plack 响应来刷新每一行的内容,所以用户在收集数据时开始实时接收内容,而不必先将所有数据累积到一个可验证的数据中?

提前感谢您的任何评论!

0 投票
1 回答
388 浏览

nginx - 如何使用 uWSGI 设置 Perl Dancer 环境(与 nginx 一起使用)

我正在尝试在生产环境中启动 Perl Dancer 应用程序。

我正在调用 uWSGI,如下所示:

当应用程序加载和运行时,它充满了错误,因为根本没有设置环境(甚至没有设置默认的开发环境)。

这些似乎不起作用:

仅供参考,这有效,使用 plackup 和 starman:

我已阅读此内容: http ://uwsgi-docs.readthedocs.org/en/latest/Options.html但似乎没有特定于 Dancer 的环境设置,例如 Python。

想法?提前谢谢!

0 投票
1 回答
155 浏览

handler - 为什么“HTML::Mason::PSGIHandler”不能与“Plack::Middleware::Debug::Parameters”一起使用?

一切都很好,直到您发布值并获得:

[uwsgi-perl error] Bad Content-Length: maybe client disconnect? (45 bytes remaining) at /home/user/perl5/lib/perl5/Plack/Middleware/Debug/Parameters.pm line 20.

应用程序的骨架是:

是什么导致了这个问题?

0 投票
1 回答
168 浏览

perl - 在 Plack::Builder 中挂载“主机”

Plack::Builder的概要和这个答案说:

我尝试了以下方法:

但是当尝试使用plackupgot 运行它时:

加载 /tmp/app.psgi 时出错:路径需要以 / 开头 /home/cw/.anyenv/envs/pleenv/versions/5.20.3/lib/perl5/site_perl/5.20.3/Plack/Builder.pm第 108 行。

怎么了?