LoginSignup
0

Railsでログイン直後にcookieにとある値をいれたい

Last updated at Posted at 2022-04-09

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

参考

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
0