Posted at

authlogicのバリデーション&エラーメッセージカスタマイズ方法3つ

More than 1 year has passed since last update.


1, authlogic既存エラーのフォーマット

I18nを使ってフォーマットできる。

activemodelとほぼ同じ書き方。


config/locales/ja.yml


ja:
authlogic:
error_messages:
login_blank: "を入力してください。"
login_not_found: "が間違っています。"
password_blank: "を入力してください。"
password_invalid: "が間違っています。"
attributes:
user_session:
login: "ログインID"
password: "パスワード"

authlogic内でエラーをaddしているところ。


ruby/2.5.0/gems/authlogic-3.8.0/lib/authlogic/session/password.rb


def validate_by_password
self.invalid_password = false

# check for blank fields
if send(login_field).blank?
errors.add(login_field, I18n.t('error_messages.login_blank', :default => "cannot be blank"))
end
if send("protected_#{password_field}").blank?
errors.add(password_field, I18n.t('error_messages.password_blank', :default => "cannot be blank"))
end
return if errors.count > 0
(後略)
end


loginはlogin_not_foundでpasswordはpassword_invalidなのが面白い。


2, ログイン時チェックの追加

認証条件にID、パスワード以外の項目を認証条件に追加したい時はwith_scopeでできる。

UserSession.with_scope(:find_options => {:conditions => "account_id = 2"}, :id => "account_2") do

UserSession.new(user_session_params)
end


  • errorsのキーは明示的に指定できない?

  • conditionsの中はべた書きにするとべた書きされる


3, ログイン時バリデーション&エラーメッセージを追加したい。

より柔軟にバリデーションを行いたい時はモデルにvalidateを追加する。

class UserSession

validate :check_if_awesome

private
def check_if_awesome
errors.add(:login, "must contain awesome") if login && !login.include?("awesome")
errors.add(:base, "You must be awesome to log in") unless attempted_record.awesome?
end
end

インスタンスをsaveする時にvalidationチェックしてくれる。

参考リンク

AuthLogicでID、パスワード以外の項目を認証条件に追加する。