Rodauthドキュメント翻訳

メールアドレス以外の識別子でのログインを使用する
Rodauthでは、現在最も一般的な識別子であるメールアドレスを、ユーザーの識別にデフォルトで使用しています。しかし、場合によっては、ユーザー名のような別の識別子でのログインを許可したいこともあるでしょう。このような場合、ログイン用のカラム名を :username
のように別のものにするとよいでしょう。これにより、ログインフィールドにメールアドレスが入力されないようにすることができます。
plugin :rodauth do
enable :login, :logout
login_column :username
end
電子メールの送信を必要とするRodauth機能には電子メールアドレスが必要で、デフォルトでは送信にloginカラムの値が使用されることに注意してください。アカウントにユーザー名とメールアドレスの両方がある場合は、loginカラムにユーザー名を指定し、メールアドレスにはemail_to
でemailカラムの値を使用することができます。
plugin :rodauth do
enable :login, :logout, :reset_password
login_column :username
email_to do
account[:email]
end
end
別の方法としては、メールアドレス以外の識別子でログインを受け付けて、内部的に自動でメールアドレスに変更する方法があります。accounts
テーブルにusername
フィールドがあれば、ログイン時にemail
ではなくusername
を入力できるようにRodauthを設定することができます。登録時にフィールドを追加する必要がある場合は、新規登録フィールドの追加ガイドを参照してください。
plugin :rodauth do
enable :login, :logout
account_from_login do |login|
# ログインパラメータがユーザ名の場合の処理
unless login.include?("@")
login = db[:accounts].where(username: login).get(:email)
end
super(login)
end
end

アカウント登録時に新規フィールドを追加する
アカウント作成フォームは、デフォルトではログインとパスワードのパラメータのみを扱います。しかし、アカウント作成時には、ユーザーのフルネームや会社名の入力を求めるなど、追加の情報を求めることができます。
Accountテーブルに追加する
フィールドをaccountsテーブルに直接追加します
atler_table :accounts do
add_column :name, String
end
create-account
テンプレートをオーバーライドする必要があります。Rodauth
のデフォルトでは、Roda views
ディレクトリにcreate-account.erb
テンプレートを追加することでオーバーライドできます。
create-account.erb
テンプレートを追加し、name
フィールドを含むようにしたら、アカウント作成前のフックでそのフィールドの送信を処理することができます。
plugin :rodauth do
enable :login, :logout, :create_account
before_create_account do
# nameフィールドの存在を検証
unless name = param_or_nil("name")
throw_error_status(422, "name", "must be present")
end
# accountレコードに新しいフィールドを割り当てます
account[:name] = name
end
end
別テーブルに追加する
または、次のように、追加のフィールドを別のテーブルに保存することもできます。
create_table :account_names do
foreign_key :account_id, :accounts, primary_key: true, type: :Bignum
String :name, null: false
end
次に、新しく送信されたフィールドを次のように処理できます。
plugin :rodauth do
enable :login, :logout, :create_account
before_create_account do
# nameフィールドの存在を検証
throw_error_status(422, "name", "must be present") unless param_or_nil("name")
end
after_create_account do
# 関連したレコードを作成
db[:account_names].insert(account_id: account[:id], name: param("name"))
end
after_close_account do
# 関連したレコードを削除
db[:account_names].where(account_id: account[:id]).delete
end
end