需要验证器
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。