为了账号安全,请及时绑定邮箱和手机立即绑定

>OSS英雄:Pilcrow——一个打造9.5K星标认证库Lucia的学生开发者 👍🇯🇵

我们又回来了,继续我们的一系列文章,在这些文章中我们将采访开源维护者们,并展示他们令人惊叹的项目。本周,我们与Pilcrow进行了交谈,这位来自日本的年轻人非常有启发,以他开发的认证库Lucia以及他对认证与安全的热爱而闻名。

Lucia 是我们在 Wasp,一个类似于 Laravel 的 React 和 Node.js 框架 中使用的一个开源工具。自 2023 年 10 月起,它在 GitHub 上的星标数已达到 9.5K。虽然 Lucia 本身将在 2025 年停止作为库使用,并转变为一个 学习资源,不过 Pilcrow 还在开发其他与身份验证相关的项目,例如 Copenhagen 和 Oslo。更多详情请访问他的 博客

希望这次采访能激励你也加入到开源社区中来。咱们开始吧!

  • 能不能稍微介绍一下你自己以及你是怎么开始编程的?是什么让你专注于身份验证和开发工具?

我是Pilcrow。我是一名在日本大学就读的学生,同时参与多个与认证和安全相关的开源项目。我大概四年前开始编程,所以对我来说,编程领域还是新手。我特别喜欢设计API,这可能是我参与库开发最喜欢的原因。

  • 露西娅让你在开发社区中获得了认可。是什么激发了你去创建这个项目,又是如何决定投入这么多的时间和精力的?

我被要求为学校的活动建立几个网站,其中我最挣扎的部分是身份验证。一半是因为我的经验不足,但也发现像Firebase这样的第三方工具不够直观。当时它们的大部分功能和API都是为SPA设计的,与服务器端渲染的应用程序不太兼容。开源选项也不怎么好。直到今天,我仍然不知道如何真正使用NextAuth(现为Auth.js)或Passport.js。

暑假的时候,我决定为 SvelteKit 构建一个更精简的 NextAuth,这样我就可以在我的项目中使用它。这成了我第一个开源项目,它在 Svelte 社区中引起了一些关注。后来我让它脱离了框架限制,它自然而然地逐渐发展起来。

这让我对开发软件库上了瘾,我发现设计API和编写文档都非常有趣。

快来支持我们吧!🙏⭐️

OSS英雄:Pilcrow——一个打造9.5K星标认证库Lucia的学生开发者👍🇯🇵_ 图片1 class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="https://imgapi.imooc.com/6722db2d0ab9fd2c03600078.jpg" alt="GH star click" target="_blank" rel="nofollow" />

如果你觉得这篇文章对你有帮助,在GitHub上为我们点个赞星! 我们在Wasp所做的所有事情都是开源的,你的支持有助于我们让网页开发工作变得更简单,这也会激励我们继续写更多这样的内容。

OSS英雄:Pilcrow——一个打造9.5K星标认证库Lucia的学生开发者👍🇯🇵_ 图片2 class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="https://imgapi.imooc.com/6722db2e097dd83907460401.jpg" alt="来支持我们" target="_blank" rel="nofollow" />

⭐️ 谢谢大家的支持 🙏

  • 管理像 Lucia 这样的开源项目肯定会有不少挑战。遇到了哪些意想不到的困难,你是怎么解决这些问题的?

老实说,并没有觉得维护开源项目特别有挑战性。主要是在Discord上花很多时间回答问题和写文档。不过,从一开始到现在,我的方法已经改变了。我现在把大部分精力放在设计API并编写文档上,而不是添加新功能。

OSS英雄:Pilcrow——一个打造9.5K星标认证库Lucia的学生开发者👍🇯🇵_ 图片3 class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="https://imgapi.imooc.com/6722db2f0944bf2804800400.jpg" alt="giphy" target="_blank" rel="nofollow" />

  • 你也在参与《哥本哈根书》的编写,这本书主要是关于认证指南的。你为什么对认证这么感兴趣?

我觉得找出某件事物是否脆弱的原因是一种有趣的谜题。我也喜欢可以让自己陷入其中的各种坑。你可能刚刚在查找某个协议的信息,下一刻就一头栽进了一篇关于某种晦涩的编码格式的50页RFC文档里。这是一片不断让你学习的新天地。

额外的好处是,我也不用操心CSS了,

  • Oslo 提供了与身份验证相关的实用工具。你能给我们介绍一下它的主要功能及其解决的问题吗?

Oslo 是一系列用于认证与加密相关操作的包集。Base64、WebAuthn、SHA-256、ECDSA、TOTP/HOTP、ASN.1 等。它不依赖第三方依赖或特定运行环境的 API,因此非常轻量且可以在任何地方运行。与类似的库相比,其 API 相对底层。它需要一些对底层协议的理解,但你不需要学习任何特定于库的概念,这在我看来,是一个很大的优点。

而且,这只是一个很简单的东西,但只要有相关文档就很有帮助了。

  • 你在多个开源项目中如何平衡时间,确保每个项目都能得到应有的关注呢?

要是有个更好的系统就好了,但我只是随心情来做事。我不太擅长一心多用,更喜欢一次只做一件事。我也不常收到bug报告,所以对我来说这样也还行。

  • 你如何保持与项目中与时俱进的安全标准要求同步?对于那些从零开始构建自己认证解决方案的团队,你对他们有什么建议?

老实说,我认为 Web 应用安全并不会发展得那么快。至少与 JavaScript 生态圈相比(但我想其他方面也不会)。一夜之间破解一个加密算法的情况很少发生,而且威胁模型和基本建议与十年以前相比并没有太大变化。很多漏洞仍然与被破坏的访问控制和输入过滤不足有关。

但就是多读一些东西。理解你正在打交道的框架和协议。RFC 和文档已经涵盖了大量可能的陷阱。我想这同样适用于那些打算把认证委托给第三方的人,至少在某种程度上来说。

  • 开源维护者经常遇到职业倦怠的问题。你是怎么保持动力的,又是哪些因素让你持续投入到这些开源项目中?

维持多个项目确实有助于避免过度劳累。我的项目规模都不大,实际上,很少有 bug 报告,因此我并不担心换个项目或者休息一两周。

我也把开源当作一种爱好。我会尽量快速解决 bug,但不会急于添加新功能。

OSS英雄:Pilcrow——一个打造9.5K星标认证库Lucia的学生开发者👍🇯🇵_ 图片4 class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="https://imgapi.imooc.com/6722db300a329e8e04800480.jpg" alt="relax gif" target="_blank" rel="nofollow" />

  • 在与开源项目合作时,你如何管理社区成员的贡献并以有意义的方式保持其他开发者的活跃?

我觉得我的项目并不是特别好的开源合作范例。我通常让别人为新功能在GitHub上创建问题。除了修复错误和拼写错误外,我一般不太接受pull请求。我喜欢花时间尝试各种API设计。我个人觉得我先独自完成初始设计阶段会更简单。我也有一些自己喜欢的代码风格,我真的想保持我的代码‘漂亮’。(我知道这听起来可能有点傻)。

老实说,我通常不太喜欢代码拉取请求,因为即使代码质量确实很差,我拒绝了,我也觉得浪费了贡献者的时间。

我清楚地知道这种方法在大型项目中行不通,但开源对我来说最终只是一个爱好,所以我觉得我应该能从中找到一些乐趣。

社区活动大多发生在Discord上,真的很感谢那些每天都很活跃并在那里回答问题的人。说实话,这可能是我收到的最有价值的贡献。

  • 如果你现在了解了关于开源和开发工具的知识,你会在项目开发和管理中做哪些不同的事?

尽早定义项目的范围和目标。在刚开始 Lucia 时我没有多想,毕竟那是我第一个开源库,但这样确实让后续主要版本的开发变得更加困难。项目能添加的功能是有限的,否则代码就会变得一团糟。你无法取悦所有人,所以选择一个方向并成为这一领域的佼佼者。

我也认为,更灵活的库是指在何处以及如何使用上更灵活的库,而不是在行为上变化多端的库,这样的库会更可预测且更易使用。明确划分库和用户的责任界限会让使用起来更加愉快。

  • 你最喜欢哪种拉面呀?

可能是指来自九州的豚骨拉面,特别是来自九州。汤底由猪骨熬制,汤底口感浓郁顺滑,而面条有嚼劲,就像 al dente 的意大利面。

看看这碗美味的炸猪排拉面!

希望你喜欢这次访谈!如果你对我们接下来要采访谁有任何建议,加入我们的Discord社区,给我们提建议吧!

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消