2023.10.11 学習記録
引き続きコード修正。
最初にフッターを解答例のとおりに作る。
…の前に前から気になってたVSCodeのショートカットキーを確認。めっちゃあるな!便利そうなのも色々あるけどすぐに全部は覚えられないな…ちょっとずつ使ってこ。
フッターOK。
次にヘッダー。消した画像だけ元に戻しておく。
サイドバーはユーザーの名前やら掲示板のタイトルやら表示してるっぽいな。同じように修正しておこう。
あら、やっぱりbootstrap-logoがないって言われるな。うーんどうしよう。
あ、確認したら解答例では普通に/assets/imagesに入れてる。そうしよう。
解決。
次。ログイン画面にフッターを追加。ここで使ってたのか。
/layouts/admin_login.html.erbから余計なタグを削除して、JSリンクタグを追加する。JSについてはなくても動作はするようだが…。
メモ:よく使うけどまだ覚えてないショートカット一覧、すぐ見られる場所に作っておきたい
タグの整理OK。
修正はこれでおしまいかな。後は疑問点を解消していこう。
まずいちばん気になってるCSRF関連から。
あの回避コードが何をやってるのか確かめる。
ん?ひょっとしてあのタグってデフォルトで/layouts/application.html.erbに入ってるものなの?
入ってるーーーー
そうか最初からこっちを参考にしながら作ればよかったんだな…。デフォルトで入ってるものだから特に解説もされてないのか。
Railsガイドに詳しい記載があった!これだ〜
つまり、
GET以外のHTMLリクエストは色々操作できちゃって危険なので、自分のサイト内からの以外は受け付けないようにしたい。そのために、自分のサイト内で発生するGET以外のリクエストには独自のトークンを持たせる。そのトークンを持ってるリクエストだけを受け付けるようにする。
ってことか。
で、そのトークンを持たせてくれるのがcsrf_meta_tag
と。だから自分のサイト内は基本全ページこれを設置しておく。全ページなので使うレイアウトファイルすべてに書いておく。
ってことね??
理解を整理するためにも一旦Xに投下してきた。
CSRF関連はせっかくだからできればあとでまとめてTILにぶちこもう。
一旦休憩。
再開。
次はcsp_meta_tag
が何なのか確認。
こちらもRailsガイドに記載はあったけど、ちょっとよくわからない。もうちょいわかりやすい記事がないか探す。
この記事もあんまり詳しくは書いてないな。Content Security Policyに関わる何か、としかわからない。
ただ、レイアウトに関しては結構わかりやすくていい記事かも。
う〜ん見た感じ詳細に関しては結構セキュリティについて突っ込んだ内容になっちゃうっぽいな。
csrf_meta_tags
と同じく悪意のあるコンテンツを弾くためのなにか、くらいの理解でいいか。基本はcsrf_meta_tags
同様すべてのレイアウトファイルに適用すると。
ちょっとスッキリしないけど次行っちゃおう。
JSリンクコードを書く位置の問題。
現状は、/admin/dashboards/index.html.erbの末尾に書いていて、/admin/layouts/admin.html.erbには書いていない。
昨日これを逆にした(解答例に合わせた)ところ、ログアウトリンクが効かなくなってしまった。
とりあえずもう一度解答例と同じにしてみる。どうなるか。
…の前に余計なJSリンクを消しておこう。そのうえで試す。
う〜んやっぱりリンクが効かなくなるなあ。開発者ツールのコンソール見ると、押した瞬間だけなにかのエラーが出るんだけど、一瞬で消えちゃって読めない。
連打しながら見てたら、unprocessable entity
ってエラーメッセージの最後に書いてあるのが見えた。これが原因?
unprocessable entity
はレコードが不正だったり正しく保存できなかった場合のステータスなんだな。ということは今ログインしてるユーザーのセッションがなにか不整合起こしてるのかも?確かにログインしたままの状態で色々いじったからなあ。
ちょいとraiseでエラー起こして見てみることにする。
あーだめだ、better_errorsではユーザーオブジェクトの中身は見られるけどセッションどうこうはわからんな。
強制ログアウトってどうやればいいんだ…?コンソールつかえばいいのかな。とりあえず一度キャッシュ消去してリロードしてみる。
別のユーザーとしてログインしたらログアウトできたっぽい。ここから再度adminユーザーとしてログインしてみよう。
ん〜〜やっぱりだめだ。なぜ??
データベースのリセットしてみるか。
サーバーのログを見るという方法を思い出して今見てみたら、「InvalidAuthenticityToken」って出てる!「Can't verify CSRF token authenticity.」って言われてる!ええ〜なんで?csrf_meta_tags
もcsp_meta_tag
も入れてるよ?!
あ、でも開発者ツールでHTMLコード見たらない…と思ったけどあれ、わかったかも。ひょっとして<%= %>
じゃなくて<% %>
で囲ってないか…?
あたり…
うわ〜〜〜また凡ミスか〜〜〜〜!!!
無事解決…こんなことで…。
dartsassについては、どうも気づいてなかった(application.scssは設定ファイルなしでも自動でプリコンパイル対象になるので)だけで最初から使ってたっぽい?アセットパイプラインじゃなくこっちを使ってる理由はよくわからないけど、それは今の私が考えたところでわかりそうもないな。
これはもうスルーしちゃっていいか。
と、いうことでようやくRails基礎21完了〜〜!はー難しかった。