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

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

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

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

PHP

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

Q&A

解決済

1回答

895閲覧

Laravelでパスワードのハッシュ化処理が追加できない

dauto

総合スコア38

Laravel

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

PHP

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

0グッド

0クリップ

投稿2019/06/27 12:28

開発環境

Laravel 5.8.24

困っている事

 バックエンドにLaravelを使用しREST APIを実装する記事を参考に既存のテーブルからデータを取得するようカスタマイズしました。
ですが、元のパスワードのハッシュ化処理が

php

1$password = $_POST["password"]; 2$salt = $row['salt']; 3 4hash_hmac('SHA256', $password.':'.'NFXwzxb5o9hfELny04AaoY0SgLRHrJlc', $salt);

となっており、自分では上記のコードをうまく以下の構文に組み込むことが出来ず、パスワードの認証をすることが出来ません。
上記のコードはどのように組み込めばいいでしょうか。

該当のコード

php

1<?php 2 3namespace App\Http\Controllers\Auth; 4 5use App\User; 6use Carbon\Carbon; 7use Illuminate\Http\Request; 8use App\Http\Controllers\Controller; 9use Illuminate\Support\Facades\Auth; 10 11class AuthController extends Controller 12{ 13 public function login(Request $request) { 14 $request->validate([ 15 'email' => 'required|string|email', 16 'password' => 'required|string', 17 //'remember_me' => 'boolean' 18 ]); 19 $credentials = request(['email', 'password']); 20 if(!Auth::attempt($credentials)) 21 return response()->json([ 22 'message' => 'Unauthorized' 23 ], 401); 24 $user = $request->user(); 25 $tokenResult = $user->createToken('Personal Access Token'); 26 $token = $tokenResult->token; 27 if ($request->remember_me) 28 $token->expires_at = Carbon::now()->addWeeks(1); 29 $token->save(); 30 return response()->json([ 31 'access_token' => $tokenResult->accessToken, 32 'token_type' => 'Bearer', 33 'expires_at' => Carbon::parse( 34 $tokenResult->token->expires_at 35 )->toDateTimeString() 36 ]); 37 } 38 public function register(Request $request) 39 { 40 $request->validate([ 41 'fName' => 'required|string', 42 'lName' => 'required|string', 43 'email' => 'required|string|email|unique:users', 44 'password' => 'required|string' 45 ]); 46 $user = new User; 47 $user->first_name = $request->fName; 48 $user->last_name = $request->lName; 49 $user->email = $request->email; 50 $user->password = bcrypt($request->password); 51 $user->save(); 52 return response()->json([ 53 'message' => 'Successfully created user!' 54 ], 201); 55 } 56 public function logout(Request $request) 57 { 58 $request->user()->token()->revoke(); 59 return response()->json([ 60 'message' => 'Successfully logged out' 61 ]); 62 } 63 64 /** 65 * Get the authenticated User 66 * 67 * @return [json] user object 68 */ 69 public function user(Request $request) 70 { 71 return response()->json($request->user()); 72 } 73} 74

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

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

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

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

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

guest

回答1

0

ベストアンサー

DBに入ってる値がhash_hmacでhash化されたものなら、ログイン時に入力されたパスワードとの比較は

$hashed = hash_hmac('sha256', $_POST["password"], $salt) if(hash_equals($DBhash, $hashed )){//$DBhashはDBから取得したパスワード //ok }else{ //ng }

passwordとかsaltは適宜置き換えるなり読み替えるなり。

でもLaravelのドキュメントの方には
Hash::makeHash::check使ったら?って書いてあるので、DBに入れる時はHash::makeで作った値を入れてログイン時にはフォームで受け取ったパスワードをHash::checkで比較した方が良いんじゃないかなと思います。
内部的にやってる事は同じかもしれませんが、そこまでソース辿ってないので知りません。

投稿2019/06/27 13:41

hentaiman

総合スコア6415

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問