Closed38

2023.10.11 学習記録

なななななな

引き続きコード修正。
最初にフッターを解答例のとおりに作る。

なななななな

…の前に前から気になってたVSCodeのショートカットキーを確認。めっちゃあるな!便利そうなのも色々あるけどすぐに全部は覚えられないな…ちょっとずつ使ってこ。

なななななな

フッターOK。
次にヘッダー。消した画像だけ元に戻しておく。

なななななな

サイドバーはユーザーの名前やら掲示板のタイトルやら表示してるっぽいな。同じように修正しておこう。

なななななな

あら、やっぱりbootstrap-logoがないって言われるな。うーんどうしよう。

なななななな

あ、確認したら解答例では普通に/assets/imagesに入れてる。そうしよう。

なななななな

解決。
次。ログイン画面にフッターを追加。ここで使ってたのか。

なななななな

/layouts/admin_login.html.erbから余計なタグを削除して、JSリンクタグを追加する。JSについてはなくても動作はするようだが…。

なななななな

メモ:よく使うけどまだ覚えてないショートカット一覧、すぐ見られる場所に作っておきたい

なななななな

タグの整理OK。
修正はこれでおしまいかな。後は疑問点を解消していこう。

なななななな

まずいちばん気になってるCSRF関連から。
あの回避コードが何をやってるのか確かめる。

なななななな

ん?ひょっとしてあのタグってデフォルトで/layouts/application.html.erbに入ってるものなの?

なななななな

入ってるーーーー
そうか最初からこっちを参考にしながら作ればよかったんだな…。デフォルトで入ってるものだから特に解説もされてないのか。

なななななな

つまり、
GET以外のHTMLリクエストは色々操作できちゃって危険なので、自分のサイト内からの以外は受け付けないようにしたい。そのために、自分のサイト内で発生するGET以外のリクエストには独自のトークンを持たせる。そのトークンを持ってるリクエストだけを受け付けるようにする。
ってことか。

なななななな

で、そのトークンを持たせてくれるのがcsrf_meta_tagと。だから自分のサイト内は基本全ページこれを設置しておく。全ページなので使うレイアウトファイルすべてに書いておく。
ってことね??

なななななな

理解を整理するためにも一旦Xに投下してきた。
CSRF関連はせっかくだからできればあとでまとめてTILにぶちこもう。
一旦休憩。

なななななな

ちょっとスッキリしないけど次行っちゃおう。
JSリンクコードを書く位置の問題。

なななななな

現状は、/admin/dashboards/index.html.erbの末尾に書いていて、/admin/layouts/admin.html.erbには書いていない。
昨日これを逆にした(解答例に合わせた)ところ、ログアウトリンクが効かなくなってしまった。

なななななな

とりあえずもう一度解答例と同じにしてみる。どうなるか。

なななななな

…の前に余計なJSリンクを消しておこう。そのうえで試す。

なななななな

う〜んやっぱりリンクが効かなくなるなあ。開発者ツールのコンソール見ると、押した瞬間だけなにかのエラーが出るんだけど、一瞬で消えちゃって読めない。

なななななな

連打しながら見てたら、unprocessable entityってエラーメッセージの最後に書いてあるのが見えた。これが原因?

なななななな

unprocessable entityはレコードが不正だったり正しく保存できなかった場合のステータスなんだな。ということは今ログインしてるユーザーのセッションがなにか不整合起こしてるのかも?確かにログインしたままの状態で色々いじったからなあ。
https://qiita.com/hrtkmztn/items/d6a1b504c4d1a5288d73

なななななな

ちょいとraiseでエラー起こして見てみることにする。

なななななな

あーだめだ、better_errorsではユーザーオブジェクトの中身は見られるけどセッションどうこうはわからんな。
強制ログアウトってどうやればいいんだ…?コンソールつかえばいいのかな。とりあえず一度キャッシュ消去してリロードしてみる。

なななななな

別のユーザーとしてログインしたらログアウトできたっぽい。ここから再度adminユーザーとしてログインしてみよう。

なななななな

ん〜〜やっぱりだめだ。なぜ??
データベースのリセットしてみるか。

なななななな

サーバーのログを見るという方法を思い出して今見てみたら、「InvalidAuthenticityToken」って出てる!「Can't verify CSRF token authenticity.」って言われてる!ええ〜なんで?csrf_meta_tagscsp_meta_tagも入れてるよ?!

なななななな

あ、でも開発者ツールでHTMLコード見たらない…と思ったけどあれ、わかったかも。ひょっとして<%= %>じゃなくて<% %>で囲ってないか…?

なななななな

あたり…
うわ〜〜〜また凡ミスか〜〜〜〜!!!

なななななな

dartsassについては、どうも気づいてなかった(application.scssは設定ファイルなしでも自動でプリコンパイル対象になるので)だけで最初から使ってたっぽい?アセットパイプラインじゃなくこっちを使ってる理由はよくわからないけど、それは今の私が考えたところでわかりそうもないな。
これはもうスルーしちゃっていいか。

なななななな

と、いうことでようやくRails基礎21完了〜〜!はー難しかった。

このスクラップは2023/10/11にクローズされました