エンジニアの卵の成長日記

ふわっちで配信してますhttps://whowatch.tv/profile/w:kurowasi2525

laravelで「次回から自動でログイン」ってどうやるん?CookieとSessionの違いって?

序章

今日のバイトは
「次回から自動でログイン」を実装してくれ
という内容だった


laravelにはAuth::attempt()というものがあるらしい
第一引数に連想配列でメールアドレスやパスワードを渡すことで認証をしてくれるらしい
そして、第二引数はtrue, falseの論理値を取る
trueを与えることでログイン維持(Remember me)機能を有効にすることができ、ユーザが自分でログアウトしない限り認証が持続するらしい


らしい...らしい...らしい...


そうです。
今回のシステムではこのメソッドは使われていませんでした。
僕はlaravelを勉強したわけでもなければ、プログラマー歴が長いわけではないので、
意図はわかりませんでした。
多分、環境の問題(laravelのバージョン・PHPなどが古い)とかセキュリティ上の問題などがあったんだと思います。




今回のシステム
PostgreSQLにはハッシュ化されたパスワードが入っている

ログイン画面からメールアドレスとパスワードが送られてくる

メールアドレスの情報からユーザの情報を引っ張ってくる

引っ張ってきた情報のハッシュ化されたパスワードとログイン画面から送られてきた文字列のパスワードを
Hash::check()で比較する

DBから引っ張ってきた情報からパスワード情報を破棄してSessionにいれる


考えたこと
Sessionの長さを変えられんか?
 →session.php内のlifetimeの値で変わる
 →VerifyCsrfToken@addCookieToResponseで登録してるみたい
 →でも僕がやりたことはこいつじゃ無理そう

 ※Sessionの有効期限はphp.ini gc_maxlifetimeで管理されているみたい


どうにかしてRemember me機能を使う
 →無理でした

cookieに情報を残す
 →先輩エンジニアさんもこれでいいのではとおっしゃってた


今回はcookieにid情報だけ残すことにしました

別の先輩エンジニアさんが、cookieにid情報以外に、
他の偽情報を入れることでどの情報が正しい情報かわからなくする方法がある
とおっしゃっていたので、適当に他の情報も作っておいた



CookieとSessionの違い
先輩エンジニアさんがいろいろ話しているときに、
CookieとSessionって何が違うんだっけと思ったので調べた
(大学1年の時に調べたのに忘れてた...)

Cookie
keyとvalueをブラウザに保存
Session
keyをブラウザ、valueをサーバに保存

参考資料の一部
www.1x1.jp
ハッシュ 5.1 Laravel
www.kaasan.info
tnamao.hatenablog.com
ohs30359.hatenablog.com