0
Help us understand the problem. What are the problem?

posted at

updated at

Railsでログイン直後の処理を設定する

Railsで開発していて、ログイン直後にcookieにとある値をいれるという処理を加えたい。
wardenのafter_set_userコールバック を使ってもできるみたいだったのでそのやり方を残しておく。

方法

wardenのafter_set_userコールバックを使う。
ここではログインしたらcookieに値をセットしたい場合の処理を例とする。

Warden::Manager.after_set_user do |user,auth,opts|
 auth.cookies.permanent['cookie名'] = 'cookie値'
end

wardenのafter_set_userコールバックの使い方
https://nekorails.hatenablog.com/entry/2018/10/27/172832#:~:text=warden%27%5D.logout(%3Aadmin)-,callback,-callback%E3%81%A8%E3%81%AF

コールバック内で、ログインをしたユーザに対して処理をしたい場合は、ブロックで渡している「user」を使う。

ここで注意なのは、userはログインに使うユーザのクラスのインスタンスのことを指す。
current_user感覚で使ってはいけない。

こういうときにうまくいかない↓
ログインに使うクラスが数パターンある
例) User、Adm、Adm2
ここでのuserに対して、User.rbに定義しているメソッドを使ってしまうと、
Userでログインした時は問題なさそうに見えるが、Adm(管理画面ユーザ)でログインしたときに、NoMethodErrorが出る。
ログインしたユーザのクラスによって処理を分けたい場合は、user.is_a(User)のようにクラスが一致しているかで判定する。
admの時はuser.is_a(Adm)のように判定する。

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 can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?