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

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

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

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

1回答

5100閲覧

PHP password_verifyが一致しない。

alyssa703957

総合スコア12

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

1クリップ

投稿2021/10/15 01:31

編集2021/10/15 02:19

ログイン機能の実装練習としてフォームにemail,password入力を求め、それぞれをPOSTで受け取る。
phpmyadminでhash化されたパスワードをログイン入力画面より、password_verifyを使い、DBのpassと入力されたpassが一致していたらtrueを返し、ログインが成功させるようにしたい。
*今回は新規登録を作成していないので、hash化はphpMyAdminのインサート機能を用い、passのhash化。
↓phpMyAdmin ver 5.1.1最新
イメージ説明

以下のコードはMVCを用いて行っているので、//で補足しています。

if(!$count){ //バリテーションのcountが0の時 $user = $users->user_info(); $user_data = $user['user']; if(password_verify($_POST['password'],$user_data['password'])){

2行目、、インスタンス化したusersクラスのuser_infoを実行、
user_infoではPOSTで受け取った$_POST['email']をもとにDBにそのemailが存在したら、そのIDの情報を
全て取得としています。(中身はしっかり受け取れています)

3行目の$user['user']は別クラスで配列を作成して呼んでいます。

if(password_verify($_POST['password'],$user_data['password'])){を実行すると
falseに飛んでしまいます。

var_dump($user_data);の結果 array (size=5) 'id' => string '16' (length=2) 'country_id' => string '0' (length=1) 'email' => string 'manage@gmail.com' (length=16) 'password' => string '$2y$10$4ZBlg3yy9rq5l1GbIkhr..PDgRV93ChTRjQ1ud8wEf0.osGIKSxz.' (length=60)    'role' => string '1' (length=1) var_dump($_POST['password']);の結果 string '1010' (length=4)

'password' => string '$2y$10$4ZBlg3yy9rq5l1GbIkhr..PDgRV93ChTRjQ1ud8wEf0.osGIKSxz.' (length=60)
このハッシュは'1010'をハッシュ化しています。

いろいろ調べたのですが、DBの文字数制限などは大丈夫でした。
phpMyAdmin内のhashは使わないほうがいいのでしょうか。

よろしくお願いいたします。

OS mac
環境 MAMP phpmyadmin

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

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

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

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

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

maisumakun

2021/10/15 02:09

> phpmyadminでhash化されたパスワード ハッシュ化したデータはどのように生成しましたか?
alyssa703957

2021/10/15 02:14

phpMyAdminに入り、DBを選択し、テーブルを選択。 画面に挿入のボタンが表示されるので、そこをクリックし、 カラム タイプ 関数 NULL 値 という欄があるので、値のところに1010 関数のところでpassword_hash()関数を選択し生成しました!
AbeTakashi

2021/10/15 02:16

> phpMyAdmin内のhashは使わないほうがいいのでしょうか。 とありますが、基本的に使えないんじゃないでしょうか。手元にあった環境のphpMyAdmin(ver 4.9.5)で見てみましたけど、password_verify()とセットで使うpassword_hash()が実装されているようには見えませんでしたが。具体的に phpMyAdminでどのようにしてハッシュ化したかを質問文内に追記して頂ければ、明確な回答が出てくるかもしれませんが、現状ではなんともいえないですね。phpMyAdminのバージョン情報も合わせて入れて頂くとより良いかと思います。 念のためpassword_hash()の参考ページも置いておきます https://www.php.net/manual/ja/function.password-hash.php
alyssa703957

2021/10/15 02:20

Adminバージョン、hashの画像追加いたしました。 アドバイスありがとうございます!
AbeTakashi

2021/10/15 02:25

なるほど、どうやら最新のphpMyAdminだとpassword_hash()がphpMyAdminに実装されているんですね。であれば正しく使えば問題無さそうな気もしますが。$_POST['password']と$user_data['password']がちゃんと正しいデータが入っているか?のチェックくらいでしょうか。
alyssa703957

2021/10/15 02:27

$_POST['password']と$user_data['password']がちゃんと正しいデータが入っているか?ですが 記載した通りの値なのですが、POSTの値もhashさせるべきなのでしょうか?
AbeTakashi

2021/10/15 02:36

いや、そうではなくて単純に実はデータが入ってないとか、Form側が間違っていて違うデータが入ってるなども考えられるということです。Form側の記載がありませんので、そういうことはご自身でちゃんとチェックして頂き問題がないとう前提になっているかです。質問文にないところは回答者には分からないので。 単純にpassword_verifyのことを質問したいなら、もう少し単純にした方がいいかもしれませんね。ちなみに password_verify('1010', '$2y$10$4ZBlg3yy9rq5l1GbIkhr..PDgRV93ChTRjQ1ud8wEf0.osGIKSxz.']) で検証したらどうなりますか?
guest

回答1

0

password_verifyでチェックするのは
password_hash()によりハッシュ化された情報です。

投稿2021/10/15 01:59

m.ts10806

総合スコア80875

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

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

alyssa703957

2021/10/15 02:03

verify する前にPOSTで受け取ったpassword をhash化させてDBの値とverify させればいいということでしょうか? 一度試したのですがうまく行きませんでした。
m.ts10806

2021/10/15 02:31

いえ、PHPからDB保存用に。 phpMyAdminの機能ではなく自身で組んだものでやってみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問