質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

1回答

811閲覧

Laravelでパスワードをさかのぼってチェックしたい場合

laravel12345

総合スコア2

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2021/10/12 09:37

編集2021/10/13 07:34

表題の通り、Laravelでパスワードをさかのぼってチェックしたい場合、どうしたらいいのでしょうか?
→パスワードの世代チェックとなります。

生徒の情報を登録するページがあると仮定し、
パスワードは別途別のテーブルで管理する仕様です。

流れとしては、登録処理をしたら、
studentsテーブルにデータを挿入と同時にパスワードの情報をパスワード管理用のテーブルにインサート

テーブルは以下のようになっています。

studentsテーブル
student_id 1
student_name 'hoge'
email 'aaa@gmail.com'
created_at
updated_at

・student_idは連番

student_passwordsテーブル(パスワード管理用のテーブル)
student_id 1
password ハッシュ化されている。egr$erwr
created_at

・student_idはauto_incrementsではない。
・student_idとcreated_atでunique制約

上記のような場合、以下のようにデータが登録されていきます。

student_id 1を登録し、パスワードを3回変更したとする。
studentsテーブル
student_name 'hoge'
email 'aaa@gmail.com'
created_at 2021/10/12 14:00:00
updated_at

student_passwordsテーブル(パスワード管理用のテーブル)
student_id 1
password ハッシュ化されている。egr$erwr
created_at 2021/10/12 14:00:00

student_id 1
password ハッシュ化されている。asdf42
created_at 2021/10/12 15:00:00

student_id 1
password ハッシュ化されている。sdvf24
created_at 2021/10/12 16:00:00

ここから本題なのですが、パスワードを入力したときに、
student_id 1
password ハッシュ化されている。asdf42
created_at 2021/10/12 15:00:00

student_id 1
password ハッシュ化されている。sdvf24
created_at 2021/10/12 16:00:00

のパスワードまで許容し、
student_id 1
password ハッシュ化されている。egr$erwr
created_at 2021/10/12 14:00:00

のパスワードは許容しない場合はどのように実装したらいいでしょうか?

今自分の頭の中にあるのは、
①student_id 1のデータを全て取得して、最新順にソートする
②入力したパスワードとはハッシュ化されたパスワードを順番にチェックしていく
③事前にパスワードを何世代まで許可しておくか決めておき、その世代数より前のパスワードだった場合エラー

こんな方針でいいのでしょうか?

もし上記で問題ない場合、②をどのように書いていこうか悩んでいます。
現状はこんな感じです。

student_idをもとに対象のパスワードテーブルのレコードを全件取得し最新順にソート

$this->where('student_id', $studentId)->orderBy('created_at', 'desc')->get(); ↓コレクションで取得 student_id 1 password ハッシュ化されている。asdf42 created_at 2021/10/12 16:00:00 student_id 1 password ハッシュ化されている。sdvf24 created_at 2021/10/12 15:00:00

②の部分で、

$password→フォームで入力されたパスワード $foo = 2;←許容するパスワード世代 if (!password_verify($password, コレクション配列のパスワードをどのように順番に照合させていくかが書き方がわからない)) { return false; }

入力したパスワードとコレクションで取得したパスワードの情報を順番にどのように照合させて不一致か判定すればいいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/10/12 09:57

自身が考えた方針で実現できることは確認されたのでしょうか? 「それで要件満たせてるならそれでいいんじゃないかな」くらいは言えますが
laravel12345

2021/10/13 07:35

すみません。方針だけ言っても「知らん!」って話ですよね。 具体的には、②の部分で詰まっているので、その旨を追記させていただきました。
guest

回答1

0

あなたの思うように実装されてはいかがでしょうか。
そのうえで、なにか問題があるなら、ここで質問すればよろしいかと。

投稿2021/10/12 10:16

y_waiwai

総合スコア87800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

laravel12345

2021/10/13 07:36

おっしゃる通り、方針を相談されても...て思いますよね。 問題点は2のパスワードを順番に照合させていくことなので、追記いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問