LoginSignup
1
1

More than 5 years have passed since last update.

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

Posted at

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、パスワード以外の項目を認証条件に追加する。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1