Madogiwa Blog

主に技術系の学習メモに使っていきます。

Ruby on Rails: AikotobaというEmail/Passwordによるシンプルな認証ライブラリを作成しました

認証周りの勉強がてらAikotobaというEmail/Passwordによるシンプルな認証ライブラリを作成しましたので使い方とかをメモしておきます。

rubygems.org

Aikotobaとは?

Rails engineを使ったEmail/Passwordによるシンプルな認証ライブラリを作成できるライブラリです。

github.com

使い方は簡単で以下をGemfileに追記し、bundle install後に

gem 'aikotoba'

Rails engineをmountし、

Rails.application.routes.draw do
  mount Aikotoba::Engine => "/"
end

これだけでシンプルなEmail/Passwordによる会員登録及び認証の機能が使えるようになります。

f:id:madogiwa0124:20220312105558p:plain

f:id:madogiwa0124:20220312105610p:plain

あとは以下のような感じで認証用のHelperやログイン状態での認可用のメソッドを生やすとControllerやViewで分岐したり色々できるようになります。

class ApplicationController < ActionController::Base
  include Aikotoba::Authenticatable

  # NOTE: You can implement the get authenticated account process as follows.
  alias_method :current_account, :aikotoba_current_account
  helper_method :current_account

  # NOTE: You can implement the authorization process as follows
  def authenticate_account!
    return if current_account
    redirect_to aikotoba.new_session_path, flash: {alert: "Oops. You need to Signed up or Signed in." }
  end
end

またオプションで以下のような機能も利用することができます。

  • アカウント作成後にメール配信してEmailの確認を行う(DeviseのConfirmableっぽいやつ)
  • 指定回数ログインに失敗した場合にアカウントをロックしアンロック用のURLを配信する(DeviseのLockableっぽいやつ)
  • パスワード変更用のURLを配信しパスワード変更を行う(DeviseのRecoverableっぽいやつ)

詳しい使い方はREADMEを参照してください。

github.com

作成したモチベーション

作成したモチベーションは以下の用な感じです。

  • 単純に認証周りの考慮すべきセキュリティ等々の実装の勉強をしたかった。
  • 認証用のライブラリ、汎用性を考慮してる反面どれも実装が複雑で難しくなにか起きたときにモンキーパッチを当てて対応する等が難しかったので、Rails engineを使ったガッツリRailsに依存したシンプルな実装のライブラリがほしかった。
  • 既存の認証用のライブラリだとbcryptが使われていることが多いかモダンなHashアルゴリズムを使いたかった(Argon2)
  • Devise等デフォルトだとガッツリUserといったサービスのコアなドメインで認証用のロジックが含まれてしまうので、それを別のモデルにできるような設計にしたかった。
  • 複数DB対応をデフォルトで考慮したい。

おわりに

個人的には割と読みやすくシンプルに実装できたのと勉強にもなり個人のWebサービスにも導入できたので満足しました🥳