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

2019/12/04

2017/05/30投稿のはてなブログから移行した内容です.

次回からログイン実装方法

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

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をサーバに保存

参考資料の一部

Laravel ユーザなら知っておくべきAuthオートログインのこと

ハッシュ 5.1 Laravel

PHP Session有効期限を延ばす方法

Laravel 5.1 入門記 その6(Request 編)

セッションとクッキーの違い

Togelloというサービスをリリースいたしました。