【Rails】devise - current_userがログイン状態の時間切れでnilになる
経緯
・ユーザー登録・ログイン機能の実装のまとめ・整理の備忘録
・開発環境localhostで動作確認をしていたら
今まで問題のなかった動作が
いきなりcurrent_userがnilという旨のエラーが発生
→ アカウント作成(RegisterController#create)の後ログイン状態が維持されていない
内容
・アカウント作成を行なった後、ログイン状態が維持されない場合の対処
対処
class RegistrationsController < Devise::RegistrationsController # 変更前:ソースコードのRegistrationsController#createのまま使用 ↓ # 変更後:bypass_sign_inメソッドを使ってオーバーライド + def create + super + bypass_sign_in(@user) + end end
参考
・deviseでログイン状態が維持できない際の対応 - Qiita
・Ruby - deviseで突然current_userが使えなくなった|teratail
【Rails】devise - current_user
経緯
ログイン機能・ユーザー登録機能の実装のまとめ・整理の備忘録として
内容
gem 'devise'
のヘルパーメソッドcurrent_user
について
ソース
current_userメソッドの定義されているのは lib/devise/controllers/helper.rb
のようです。
current_userメソッドも
authenticate_user!メソッドと同様に動的に生成されるメソッドです。
つまり、current_userメソッドとしてだけではなく、
動的にcurrent_adminなどとしても使用可能です。
current = warden.authenticate(scope: mapping)
の記述が示しているように、
Wardenで認証したレコードを返り値としたメソッドのようですね。
使い方
認証後のレコードをcurrent_#{hogehoge}
として
controller/view内で定義することができます。
関連エラーなど
・ログイン画面でログインした場合
→ current_userに認証されたUserモデルレコードが格納される
・ユーザー登録画面でアカウント作成しアプリ内の何らかのページにリダイレクトした場合
→ current_userには作成したアカウントは格納されていない!!
となるのがdeviseの仕様らしく、
→ current_userに作成したアカウントのUserモデルレコードが格納されたログイン状態と一旦なるものの、
ログイン状態が一定時間経つと解除されてしまうらしく、
<%= current_user.name >
などは current_userがnilとなっているため
NoMethodError (undefined method `name' for nil:NilClass):
のエラーが発生してしまうという事態が起こりました
(bypass_sign_in
メソッドで対応して解消できました)
deviseからすると、
「アカウント作成は認証を含んでいません」ということですね。
こちらもソースコードから追いたいところ。
【Rails】devise - authenticate_user! メソッド
経緯
ユーザー登録機能・ログイン機能を
・gem 'sorcery'
・ gem 'devise'
で実装したことはあるものの、整理できていないので備忘録でまとめたいと思い
内容
Ruby on Rails でユーザー・ログイン機能を実装するときに使用する
gem 'device'
の
authenticate_user!
メソッドについて
ソース
早速、 deviseのソースのどこで定義されているか見ようとしたら見当たらず。。
と思いきや、
lib/devise/controllers/helpers.rbで
authenticate_#{mapping}!
の形で動的に生成されるもののようです
ソースコードを見ると、 authencate_user!メソッドの中でwardenが使われており、 devise を知るにはまず warden を知るが良い と紹介もされていたりしますね
使い方
$ rails generate devise MODEL
でdeviseのルーティングをしたcontroller/viewの中で
before_action :authenticate_user!, only: [:some_method]
とすると
認証されているモデルレコードのみが使用できるメソッドとして定義できます
※ 認証 とは
汝、何を以て『認証』とす? について記載しているサイトがありました
面白いところですけど、沼(深淵)の気配が..w
いつかここら辺も読み解けるようになりたいと感じた本日
【Git】マージ済ブランチを一括削除
自分、どこのブランチにいるんじゃ
ことあるごとにブランチ作って!マージ!を繰り返すと
$ git branch
で自分のいるブランチの位置がわからなくなる事態に
(この時、masterブランチにいるのですがスクロールしないと表示されない)
alias
./ gitconfig [alias] br = branch
1つずつブランチ削除は手間
ブランチを削除すると解消されるのですが1つずつ
$ git brabch -d [BranchName]
をするのもすごい手間‥ブランチ名は手入力なので間違えるとエラーになったり
便利コマンド発見
そこでここで紹介してるコマンド
$ git branch | grep -v master | xargs git branch -D
qiita.com
を実行すると一気に削除できました 便利!