像 Rails 8 一样生成身份验证

需要验证器

Rails 没有默认的方式来验证用户身份,就像 Laravel 在 PHP 世界中所做的那样。

长期以来,Devise gem 一直是 Rails 的最佳选择,但由于长期在 Reddit 上争论的原因,它并没有达到 100% 的采用率。

来自DHH:

我们可以教 Rails 开发人员如何使用基本块 [of authentication] 通过添加一个基本的身份验证生成器,该生成器本质上用作脚手架,但用于身份验证。

最接近 Rails 7 的身份验证生成器

身份验证零 gem 是迄今为止最接近的解决方案。

我用过。 我发现它非常令人愉快,代码行很少,非常容易定制,完整的测试套件可确保我的所有定制不会产生任何类型的回归。 最后,我在验证之上添加了一些自定义的turbo_stream,以确保一流的用户体验。

这里的教程是我当前使用的简化版本。

先决条件

对于本教程,您将需要:

1
2
3
4
5
ruby -v  # 3.3.0
rails -v  # 7.1.3
bundle -v  # 2.4.10
node -v # 20.9.0
git --version # 2.34.1

构建默认的 Rails 应用程序

创建一个新的 Rails 应用程序,如下所示:

1
2
3
rails new myapp
cd myapp

所以这里没什么特别的,不 – 最小选项 或无论什么。 坚持默认有时是确保更多集成和更少错误的最佳方法。

添加身份验证零

所以我们现在遵循 gem 的官方文档并添加:

1
2
3
bundle add authentication-zero
bin/rails generate authentication

您现在拥有路线、控制器、模型、迁移、测试等。

确保整个测试套件通过

如果一切都是绿色的,您可以进入下一步:)

添加 letter_opener gem

您需要添加一种在本地计算机上查看已发送电子邮件的方法,以便使用确认电子邮件(例如)。

为此,请在 Gemfile 中添加:

1
2
# inside Gemfile
gem "letter_opener", group: :development

并运行

然后里面 config/environments/development.rb 添加

1
2
config.action_mailer.delivery_method = :letter_opener
config.action_mailer.perform_deliveries = true

玩应用程序

默认情况下,开发数据库中没有用户。

第一个选项是将其添加到 Seed.rb 文件中,

1
2
User.create(email: "[email protected]", password_digest: BCrypt::Password.create("Secret1*3*5*"), verified: true)

并运行

并重新启动您的本地网络服务器

现在您可以与种子文件中描述的用户连接。

但那是作弊,对吧?

第二种选择是使用该应用程序,首先转到主页,然后单击“注册”,然后填写一个易于记住的电子邮件和密码组合。

然后转到 localhost:3000/letter_opener,然后单击验证链接。

伟大的! 您现在有了一个新的经过验证的用户(谁说“客户”?还没有;))

花时间阅读代码

不要羞于研究源代码。 这个宝石的美妙之处在于没有大量复杂的函数需要阅读。 试图理解 设计 或者 罗道斯 又是另一个故事了。

从routes.rb开始,然后尝试使用该应用程序,并尝试了解每个单元测试的作用及其原因。

现在您已经拥有了一个您完全理解的完整身份验证系统!

结论

我猜一旦 Rails 8 身份验证器出现,这篇文章就会被弃用。

等待这个,我们有一个干净、优雅和可定制的解决方案:零身份验证 gem。

Leave a Reply

Your email address will not be published. Required fields are marked *

近期新闻​

编辑精选​