【Rails】devise - current_userがログイン状態の時間切れでnilになる

経緯

・ユーザー登録・ログイン機能の実装のまとめ・整理の備忘録
・開発環境localhostで動作確認をしていたら
 今まで問題のなかった動作が
 いきなりcurrent_userがnilという旨のエラーが発生
→ アカウント作成(RegisterController#create)の後ログイン状態が維持されていない

内容

・アカウント作成を行なった後、ログイン状態が維持されない場合の対処

対処

bypass_sign_inメソッドを使用して対処しました

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からすると、
「アカウント作成は認証を含んでいません」ということですね。

こちらもソースコードから追いたいところ。

【GitHub】ソースコードの検索

経緯

Gemで定義されているメソッドのソースコード検索で 、
[Go to file] → 検索ワード入力
で表示される結果はファイル名検索なので、
「メソッドはどのファイルで定義されているか?」などがわからないな、 と思い Image from Gyazo

内容

GitHubリポジトリソースコード内のメソッド検索
(メソッド検索に限らず、全文検索

ここに入力しましょう

Image from Gyazo

参考

【GitHub】ソースコード検索したい。 - Qiita

【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 を知るが良い と紹介もされていたりしますね

使い方

devise本家で紹介されているとおり、

$ rails generate devise MODEL

でdeviseのルーティングをしたcontroller/viewの中で

 before_action :authenticate_user!, only: [:some_method]

とすると
認証されているモデルレコードのみが使用できるメソッドとして定義できます

※ 認証 とは

汝、何を以て『認証』とす? について記載しているサイトがありました
面白いところですけど、沼(深淵)の気配が..w
いつかここら辺も読み解けるようになりたいと感じた本日

【Git】マージ済ブランチを一括削除

自分、どこのブランチにいるんじゃ

ことあるごとにブランチ作って!マージ!を繰り返すと

$ git branch

で自分のいるブランチの位置がわからなくなる事態に
(この時、masterブランチにいるのですがスクロールしないと表示されない) Image from Gyazo

alias

./ gitconfig


[alias]
    br = branch

1つずつブランチ削除は手間

ブランチを削除すると解消されるのですが1つずつ

$ git brabch -d [BranchName]

をするのもすごい手間‥ブランチ名は手入力なので間違えるとエラーになったり

便利コマンド発見

そこでここで紹介してるコマンド

$ git branch | grep -v master | xargs git branch -D qiita.com

を実行すると一気に削除できました 便利!

【CSS】超カンタン自動スクロール

CSSだけで自動スクロール‥だと!?

qiita.com

参考にスクロールできるか
やってみたら実際できて驚き

このような動きをつける実装では
swiper.jsで
「動かない‥動かない‥」と頭悩ませた記憶 が(笑)
そんなパターンが多かったのですが
すんなりできたのでほんとすごい‥

ちゃんとスクロールしてる


Image from Gyazo

ポートフォリオ もだんだん形になってきて 楽しい&嬉しい

【Vue】v-forでリストレンダリングできないネスト配列構造

v-forでレンダリングできない構造?

[ [{ },{ }, ‥ ,{ } ], [{ },{ }, ‥ ,{ } ], ‥ ,[{ },{ }, ‥ ,{ } ] ]

というデータの配列構造のデータを作成して v-forで要素をリストレンダリングさせようとしたら できなかった

[ { [ {  },  ‥ ,{  } ], ‥ , [ {  },  ‥ ,{  } ]  } ]

という構造ならできるらしい

v-forで入れ子の情報を表示する - コリラボ

あくまで

[{  },{  },‥,{  }]

という構造が基本構造で、
この基本構造のネストなら
v-forでレンダリング