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チェックしてくれる。