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

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

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

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

1回答

1924閲覧

Laravelの認証処理のハッシュ化アルゴリズムをSHA256にしたい

dauto

総合スコア38

Laravel

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/06/29 12:45

編集2022/01/12 10:55

開発環境

Laravel 5.8.26

困っている事

Laravelのデフォルトのハッシュ化のアルゴリズムはBcryptですが、今回はパスワードがSHA256で保存されている既存のテーブルを使用したい為、こちらの記事を参考にSHA256のHasherとProviderを追加したのですが、api認証を行うと500エラーが返ってきており認証をすることが出来ません。
追加したHasherとProviderは以下の通りです。何処を修正すれば認証ができるのか、ご助言を頂けないでしょうか。

laravel

1<?php 2 3namespace App\Libraries; 4 5use App\Customer; 6use RuntimeException; 7use Illuminate\Contracts\Hashing\Hasher as HasherContract; 8use Illuminate\Hashing\AbstractHasher; 9use Illuminate\Http\Request; 10 11class SHA256Hasher implements HasherContract 12{ 13 /** 14 * Hash the given value. 15 * 16 * @param string $value 17 * @param array $options 18 * @return string 19 * 20 * @throws \RuntimeException 21 */ 22 public function make($value, array $options = array(), Request $request) 23 { 24 $request->validate([ 25 'email' => 'required|string|email' 26 ]); 27 $email = request(['email']); 28 $salt = Customer::where('email', $email)->select('salt')->get(); 29 return hash_hmac('SHA256', $value.':'.'秘密鍵', $salt); 30 } 31 32 /** 33 * Check the given plain value against a hash. 34 * 35 * @param string $value 36 * @param string $hashedValue 37 * @param array $options 38 * @return bool 39 * 40 * @throws \RuntimeException 41 */ 42 public function check($value, $hashedValue, array $options = array()) 43 { 44 return $this->make($value) === $hashedValue; 45 } 46 47 /** 48 * Check if the given hash has been hashed using the given options. 49 * 50 * @param string $hashedValue 51 * @param array $options 52 * @return bool 53 */ 54 public function needsRehash($hashedValue, array $options = array()) 55 { 56 return false; 57 } 58}

laravel

1<?php 2 3namespace App\Providers; 4 5use Illuminate\Support\ServiceProvider; 6use App\Libraries\SHA256Hasher; 7 8class SHA256HashServiceProvider extends ServiceProvider 9{ 10 /** 11 * Indicates if loading of the provider is deferred. 12 * 13 * @var bool 14 */ 15 protected $defer = true; 16 17 /** 18 * Register the service provider. 19 * 20 * @return void 21 */ 22 public function register() 23 { 24 $this->app->singleton('hash', function() { return new SHA256Hasher; }); 25 } 26 27 /** 28 * Get the services provided by the provider. 29 * 30 * @return array 31 */ 32 public function provides() 33 { 34 return array('hash'); 35 } 36}

追記

Laravelのlogに出力されていたエラーはこちらになります。

log

1local.ERROR: Argument 1 passed to Illuminate\Auth\EloquentUserProvider::validateCredentials() must be an instance of Illuminate\Contracts\Auth\Authenticatable, instance of App\Customer given, called in /var/www/html/siro/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php on line 377 {"exception":"[object] (Symfony\Component\Debug\Exception\FatalThrowableError(code: 0): Argument 1 passed to Illuminate\Auth\EloquentUserProvider::validateCredentials() must be an instance of Illuminate\Contracts\Auth\Authenticatable, instance of App\Customer given, called in /var/www/html/siro/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php on line 377 at /var/www/html/siro/vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php:141)

追記2

500エラーは新規モデルがうまく適用されていなかったのが原因だったので、中の構文をapp/User.phpに移動させたところ消えたのですが、今度は401エラーが表示され認証することが出来ません。これはどう対処すればいいでしょうか。

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

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

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

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

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

m.ts10806

2019/06/29 12:48

Laravelのログは確認されましたか?500エラーだと原因は多岐に渡るため、ますログを確認する必要があります
dauto

2019/06/29 13:14

Logにエラーが出力されていた為、追記致しました。
guest

回答1

0

Customerはユーザー用のモデルかと思いますが、Illuminate\Contracts\Auth\Authenticatableインターフェイスの実装をしていないようなので、
単純実装であれば、Laravelのappディレクトリに最初からあるUserモデルのように、Authenticatable(Illuminate\Foundation\Auth\User)を継承しているか確認してください。

投稿2019/07/01 08:10

編集2019/07/01 08:11
aro10

総合スコア4106

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問