🦸 OSS 英雄:Pilcrow,一位构建了 Lucia - 身份验证库的学生,在 GitHub 上拥有 9.5k 个 star ⭐ 🇯🇵
我们带着系列文章回归,采访开源维护者,并展示他们持续推进的精彩项目。本周,我们采访了Pilcrow,一位来自日本的年轻开发者,他以 Lucia 身份验证库以及对身份验证和安全的热爱而闻名。
Lucia是我们在 Wasp 内部使用的开源工具之一,Wasp 是一个类似 Laravel 的 React 和 Node.js 框架。自 2023 年 10 月以来,它在 GitHub 上的 star 已增至 9.5K。虽然 Lucia 本身将在 2025 年作为库弃用,并转换为学习资源,但 Pilcrow 也在开发其他与身份验证相关的项目,例如 Copenhagen 和 Oslo。您可以在他的博客上了解更多关于他的工作和项目的信息。
希望本次采访能激励您为开源社区做出贡献。让我们一起深入了解!
- 能否简单介绍一下您自己以及您是如何开始从事编程工作的?是什么促使您专注于开发人员的身份验证和工具?
我是 Pilcrow,日本的一名大学生,致力于各种与身份验证和安全相关的开源项目。我大约四年前开始编程,所以在这个领域还比较陌生。我非常喜欢设计 API,这可能是我喜欢从事库工作的最大原因。
- Lucia 让你在开发者社区获得了认可。是什么启发你创作这款游戏?你为什么决定投入如此多的时间和精力?
我被要求为学校活动构建几个网站,其中最让我头疼的部分就是身份验证。这其中一半是因为我的缺乏经验,但另一方面,我发现像 Firebase 这样的第三方产品不够直观。当时,它们的大多数功能和 API 也都是针对单页应用 (SPA) 的,与服务器渲染的应用程序配合得不太好。开源产品也不太好。直到今天,我仍然不太清楚如何使用 NextAuth(现在的 Auth.js)或 Passport.js。
暑假期间,我决定为 SvelteKit 构建一个更精简的 NextAuth,以便将其用于我的项目。这是我的第一个开源库,但它在 Svelte 社区引起了一些关注。不久之后,我将其设置为与框架无关,它自然而然地发展起来。
从事这项工作让我迷上了图书馆开发,我发现设计 API 甚至记录它们非常有趣。
支持我们!🙏⭐️

如果您觉得这篇文章有帮助,不妨在 Github 上给我们点个星!Wasp 的所有开源项目都是开源的,您的支持能帮助我们简化 Web 开发,并激励我们撰写更多类似的文章。
- 管理像 Lucia 这样的开源项目必然充满挑战。您遇到了哪些意想不到的障碍?您是如何应对的?
说实话,我并不觉得维护开源项目有什么特别的挑战。只是需要花费大量时间在 Discord 上回答问题和撰写文档。不过,我确实改变了自己开发库的方式,从一开始我就更倾向于这样做。现在,我把大部分精力放在设计 API 和撰写文档上,而不是添加新功能。
- 您还在编写《哥本哈根书》,这本书主要探讨身份验证指南。为什么身份验证对您来说如此重要?
我发现,弄清楚为什么某些东西容易受到攻击,又为什么不容易受到攻击,是一个很有趣的谜题。我也很喜欢这个领域里有那么多兔子洞,你可以钻进去探索。前一刻你还在搜索某个协议,下一刻就可能读到一份长达 50 页、关于某种晦涩编码格式的 RFC。这是一个激励你不断学习的领域。
(另外,我不需要处理 CSS)。
- Oslo提供了与身份验证相关的实用程序。您能介绍一下它的主要功能以及它解决的问题吗?
Oslo 是一个包含各种身份验证和加密操作的软件包集合,包括 Base64、WebAuthn、SHA-256、ECDSA、TOTP/HOTP、ASN.1 等。它不依赖第三方依赖项或特定于运行时的 API,因此非常精简,可在任何地方运行。与类似的库相比,这些 API 也相对较低。它需要一些底层标准的知识,但你无需学习任何特定于库的概念,这在我看来是一个非常大的优势。
此外,这是一个非常简单的功能,但只要有某种文档就是一个很大的优点。
- 您如何平衡在多个开源项目上的时间,同时确保每个项目都得到应有的关注?
我希望能有个更好的系统,但我现在只想做自己想做的事情。我不太擅长多任务处理,更喜欢一次专注于一件事。而且我收到的bug报告也不多,所以这个系统对我来说挺好用的。
- 您如何跟上各个项目不断发展的安全标准?您会给从头开始构建自己的身份验证解决方案的团队什么建议?
说实话,我不认为 Web 应用程序安全性发展得那么快。至少与 JavaScript 生态系统相比是这样(但我猜没有什么比这更快了)。加密算法很少会在一夜之间被攻破,威胁模型和基本建议也和 10 年前一样。很多漏洞仍然是由于访问控制失效和输入安全措施不足造成的。
但需要大量阅读。了解你正在处理的框架和协议。RFC 和文档已经涵盖了很多可能出现的陷阱。我想这对于那些计划将授权委托给第三方的人来说也适用,至少在某种程度上是这样。
- 开源维护者经常会感到倦怠。您是如何保持动力的?又是什么让您坚持参与这些项目?
维护多个项目确实有助于避免倦怠。我的项目规模不大,实际的 Bug 报告也很少,所以我不用担心把精力转移到其他项目上,或者休息一两周。
我也把开源视为一种爱好。我仍然会尽力快速修复错误,但不会急于添加新功能。

- 在开源协作时,您如何管理社区贡献并让其他开发人员以有意义的方式参与?
我认为我的项目并不是开源合作的典范。我通常会请别人在 GitHub 上提交新功能的 Issue,除了修复 bug 和拼写错误之外,我不太接受 Pull Request。我喜欢花时间尝试各种 API 设计,我个人觉得如果自己完成初始设计阶段会更容易。我还喜欢某种风格的代码,并且非常希望我的代码保持“优美”(是的,我知道这听起来很蠢)。
说实话,我一般不喜欢拉取请求,因为我觉得如果我拒绝它,就浪费了贡献者的时间,即使代码客观上很糟糕。
我很清楚这种封闭的方法在更大的项目中行不通,但从事开源工作最终只是一种爱好,所以我认为我应该能够从中获得一些乐趣。
社区的大部分内容来自 Discord,我非常感谢那些每天活跃在那里并解答问题的人。说实话,这可能是我收到的最有价值的贡献之一。
- 了解了开源和开发人员工具之后,您会在项目开发和管理方面做哪些不同的事情?
尽早定义项目的范围和目标。我并不责怪自己在启动 Lucia 时没有提前考虑,因为它实际上是我的第一个开源库,但如果能提前考虑,后续主要版本的开发就会容易得多。在代码变得混乱之前,你能添加到项目中的功能是有限的。你不可能让每个人都满意,所以选择一条路,并为此做到最好。
我还认为,那些在使用方式和使用场景上灵活的库,比那些行为上灵活的库,更易于预测和使用。清晰地界定库和用户责任之间的界限,将使使用体验更加愉悦。
- 您最喜欢哪种拉面?
可能是猪骨汤,具体来说就是九州岛(日本四大岛中第三大岛)的特色汤头。汤头是用猪骨熬制的,口感顺滑浓郁,面条也挺有嚼劲(就像有嚼劲的意大利面)。
希望你喜欢这次采访!如果你对下次采访对象有什么建议,欢迎加入 Discord并告诉我们!
文章来源:https://dev.to/wasp/oss-heroes-pilcrow-a-student-who-built-lucia-auth-library-with-95k-stars-on-github-524l