1706599278
2024-01-29 10:55:34
認証システムが必要な場合
Rails には、PHP の世界で Laravel が行うような、ユーザーを認証するためのデフォルトの方法がありません。
長い間、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
だから、ここには特別なことは何もありません、いいえ –minimalオプション または何でも。 デフォルトを使用することが、統合を強化しバグを減らすための最良の方法である場合があります。
認証ゼロを追加
そこで、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)
そして走ります
そして、ローカル Web サーバーを再起動します。
これでシードファイル内に記述されたユーザーに接続できるようになります。
でもそれは不正行為ですよね?
2 番目のオプションは、アプリケーションを試してみる方法です。最初にホームページにアクセスし、次に「サインアップ」をクリックして、覚えやすい電子メールとパスワードの組み合わせを 1 つ入力します。
次に、localhost:3000/letter_opener に移動し、検証リンクをクリックします。
素晴らしい! これで、新しい認証済みユーザーができました (「顧客」と言ったのは誰ですか? まだです 😉 )
時間をかけてコードを読む
ここでソース コードを調査することをあまり恥ずかしがらないでください。 この宝石の利点は、読み取る必要のある複雑な関数が大量にないことです。 理解しようとしている 工夫する または ロダウト はまた別の話です。
まず Router.rb から始めて、次にアプリケーションを試して、各単体テストが何を行うのか、そしてその理由を理解してください。
これで、完全に理解した完全な認証システムが完成しました。
結論
Rails 8 認証システムが登場するとすぐに、この記事は非推奨になると思います。
これを待っている私たちには、クリーンでエレガントでカスタマイズ可能なソリューション、つまり認証ゼロの gem が用意されています。
#Rails #と同様に認証を生成する