Railsで開発していて、ログイン直後にcookieにとある値をいれるという処理を加えたいことがあった。
wardenのafter_set_userコールバックを使ってできるみたいだったのでそのやり方を残しておく。
やり方
wardenのafter_set_userコールバックを使う。
Warden::Manager.after_set_user do |user, auth, opts|
auth.cookies.permanent['cookie名'] = 'cookie値'
end
この時コールバック内でログインをしたユーザに対して処理をしたい場合は、ブロックで渡しているuserを使う。
userはログインに使うユーザーのクラスのインスタンスのことを指すことに注意が必要で、以下のような場合は気をつけないといけない。
こういうときにうまくいかない↓
ログインに使うクラスが数パターンある
例) UserとAdmの2つのログインに使うクラスがある
ログインしたユーザーがUserクラスのユーザーであった場合、userに対しUserクラスに定義しているメソッドを使っても問題ないが、AdmでログインしたときにNoMethodErrorになる。
ログインしたユーザのクラスによって処理を分けたい場合は、user.is_a(User)のようにクラスが一致しているかで判定してあげる。
Warden::Manager.after_set_user do |user, auth, opts|
# admの時にときエラーになるためクラスが一致するかで判定
if user.is_a(User) && user.〇〇?
auth.cookies.permanent['key'] = 'value'
end
end
参考