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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

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

PHP

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

Q&A

解決済

3回答

983閲覧

Laravel ログイン認証を通したい

mshmash

総合スコア23

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

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

PHP

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

0グッド

0クリップ

投稿2020/07/19 04:37

前提・実現したいこと

Auth::attempt($credentials)の処理を
通したい。

発生している問題

$credentialsの値 [2020-07-19 13:10:18] local.DEBUG: array ( 'admin_id' => 'admin', 'admin_pass' => 'admin', ) Auth::attempt($credentials) で処理をするがnullが返ってきます。

該当のソースコード

LoginController

1<?php 2//namespaceはdirectory配下のファイルを自動読み込みを行うことができるようにしています。 3namespace App\Http\Controllers\Admin; 4//laravelのコントローラーを継承する為 5use App\Http\Controllers\Controller; 6//管理者情報のデータを取得する為 7use App\Table\Admin\AdminInfo; 8//Admin 9use \App\Http\Requests\Admin\AdminLoginRequest; 10 11//hash処理 12use Illuminate\Support\Facades\Hash; 13//認証処理 14use Illuminate\Foundation\Auth\AuthenticatesUsers; 15use Illuminate\Support\Facades\Auth; 16use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; 17 18class LoginController extends Controller 19{ 20 /*ログイン画面*/ 21 public function loginAdmin() 22 { 23 return view('Admin/login'); 24 } 25 26 /*ログイン処理*/ 27 public function mainAdmin(AdminLoginRequest $request) 28 { 29 $admin_pass = AdminInfo::where('admin_id',$request->admin_id)->value('admin_pass'); 30 31 if (Hash::check($request->admin_pass, $admin_pass)) { //入力値, hash_pass 32 $credentials = $request->only('admin_id', 'admin_pass'); //管理者情報部分取得 33 34 if(Auth::attempt($credentials)){ 35 \Log::debug(Auth::attempt($credentials)); 36 \Log::debug('認証成功'); 37 38 return view('Admin/Main/main',compact('admin_id','admin_pass')); 39 //return redirect('/')->with('flash_message', '登録完了!'); 40 41 }else{ 42 \Log::debug('認証失敗'); 43 return redirect()->back(); 44 } 45 }else{ 46 //echo "password違います"; 47 } 48 } 49 50 /* 51 ログアウト処理 52 */ 53 public function logout(){ 54 // 55 \Log::debug('ログアウト OK!'); 56 Auth::logout(); 57 return redirect('/')->with('flash_message', 'ログアウト'); 58 } 59 60 /*管理者追加*/ 61 public function adminAdd() 62 { 63 return view('Admin/Admin/add'); 64 } 65 /*管理者追加完了*/ 66 public function adminAddComp(Request $request) 67 { 68 //userIdの取得 requestの値 69 $admin_id = $request['admin_id']; 70 $admin_pass = $request['admin_pass']; 71 $admin_name = $request['admin_name']; 72 $memo = $request['memo']; 73 74 $admin_pass = Hash::make($admin_pass); 75 76 $user_infos = AdminInfo::create(['admin_id' => $admin_id,'admin_pass' => $admin_pass,'admin_name' => $admin_name,'memo' => $memo]); 77 78 return view('Admin/Admin/comp',compact('admin_id','admin_pass','admin_name','memo')); 79 } 80} 81

Auth

1<?php 2 3return [ 4 5 //user情報とadmin情報 6 'defaults' => [ 7 'guard' => 'web', 8 'passwords' => 'admin_infos',//authの書き換え 9 ], 10 11 12 13 'guards' => [ 14 'web' => [ 15 'driver' => 'session', 16 'provider' => 'admin_infos', 17 ], 18 'api' => [ 19 'driver' => 'token', 20 'provider' => 'users', 21 'hash' => false, 22 ], 23 ], 24 25 26 27 'providers' => [ 28 'admin_infos' => [ 29 'driver' => 'eloquent', 30 'model' => App\Table\Admin\AdminInfo::class, 31 ], 32 ], 33 34 35 36 'admin_infos' => [ 37 'users' => [ 38 'provider' => 'users', 39 'table' => 'password_resets', 40 'expire' => 60, 41 'throttle' => 60, 42 ], 43 ], 44 45 'password_timeout' => 10800, 46 47];

login

web

1<?php 2 3use Illuminate\Support\Facades\Route; 4 5/* 6|-------------------------------------------------------------------------- 7| Web Routes 8|-------------------------------------------------------------------------- 9| 10| Here is where you can register web routes for your application. These 11| routes are loaded by the RouteServiceProvider within a group which 12| contains the "web" middleware group. Now create something great! 13| 14*/ 15 16// Route::get('/',function () { 17// return view('UserInfo/Public/info'); 18// }); 19/*login*/ 20Route::get('Admin/login','Admin\LoginController@loginAdmin'); 21 22/*main*/ 23Route::post('Admin/Main/main','Admin\LoginController@mainAdmin'); 24 25/*★AdminAdd*/ 26Route::post('Admin/Admin/add','Admin\LoginController@adminAdd'); 27 28/*★AdminAddcomp*/ 29Route::post('Admin/Admin/comp','Admin\LoginController@adminAddComp'); 30 31/*list*/ 32Route::get('Admin/UserInfo/info','Admin\AdminController@userList'); 33 34// /*edit*/ 35 //Route::get('Admin/UserInfo/Edit','Admin\AdminController@userEdit'); 36 Route::get('Admin/UserInfo/Edit','Admin\AdminController@userEdit'); 37// Route::get('Admin/UserInfo/Edit/{id}',function($id){ 38 39// }); 40/*edit_conf*/ 41Route::post('Admin/UserInfo/Edit/conf','Admin\AdminController@userEditConf'); 42 43/*edit_comp*/ 44Route::post('Admin/UserInfo/Edit/comp','Admin\AdminController@userEditComp'); 45 46/*add*/ 47Route::get('Admin/UserInfo/Add','Admin\UserAddController@userAdd'); 48 49/*Add_conf*/ 50Route::post('Admin/UserInfo/Add/conf','Admin\UserAddController@userAddConf'); 51 52/*Add_comp*/ 53Route::post('Admin/UserInfo/Add/comp','Admin\UserAddController@userAddComp'); 54 55/*User_Delete_Conf*/ 56Route::post('Admin/UserInfo/Delete/conf','Admin\UserDeleteController@userDeleteConf'); 57 58/*User_Delete_Conf*/ 59Route::post('Admin/UserInfo/Delete/comp','Admin\UserDeleteController@userDeleteComp');

試したこと

・ログでどのような値を取得されているか確認
・venderの確認
※attemptの元の処理がどうなっているのか?
・関数チェックや変数チェック

補足情報(FW/ツールのバージョンなど)

・Laravel version7
・mysql
・windows10

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

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

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

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

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

guest

回答3

0

下記のように書いても変わらないでしょうか・・

php

1Auth::guard('admin_infos')->attempt

投稿2020/07/19 05:07

yuki84web

総合スコア1857

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

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

mshmash

2020/07/19 05:47 編集

回答頂きありがとうございます。 上記内容を入れてみたら「Auth guard [admin_infos] is not defined.」でました!!(希望が!!) なのでデフォルトのAuth.phpにguard=>admin_infosに設定を変えましたら Undefined property: Illuminate\Auth\SessionGuard::$attemptとエラーがでました。。。 Auth::guard('admin_infos')のみだと処理は成功しました。 ただ、attemptの処理を通してないので Auth::guard('admin_infos')->attempt($credentials)で再度トライしたのですが。。。 認証失敗でした。。。
yuki84web

2020/07/19 06:10 編集

「デフォルトのAuth.phpにguard=>admin_infosに設定を変えましたら」とありますが、auth.phpの'guards' => []の中に’admin_infos’はありますか?
mshmash

2020/07/19 06:12

'guards' => [ 'admin_infos' => [ 'driver' => 'session', 'provider' => 'admin_infos', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => false, ], ],と設定しております。
mshmash

2020/07/19 09:32

行けました!! データベースのカラムがadmin_passにしていたのが原因でした。。。 venderディレクトリのDatabaseUserProviderクラスの関数retrieveByCredentialsで if (empty($credentials) || (count($credentials) === 1 && array_key_exists('password', $credentials))) { return; } 上記処理が描いていたためarray_key_exists('password', $credentials)で引っかかっていたので カラムをpasswordに変更しまいした!! >Auth::guard('admin_infos')->attempt($credentials) 上記のやりかた今後参考になりますので本当にありがとうございました。 ※管理者とユーザーの判別で!!
yuki84web

2020/07/19 09:42

なるほど、そのような仕様だったのですね。解決したそうでなによりです。
mshmash

2020/07/19 22:34

ありがとうございます!!
guest

0

自己解決

データベースのカラムがadmin_passにしていたのが原因でした。。。
venderディレクトリのDatabaseUserProviderクラスの関数retrieveByCredentialsで
if (empty($credentials) ||
(count($credentials) === 1 &&
array_key_exists('password', $credentials))) {
return;
}
上記処理が描いていたためarray_key_exists('password', $credentials)で引っかかっていたので
カラムをpasswordに変更しまいした!!

投稿2020/07/20 03:37

mshmash

総合スコア23

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

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

0

データベースのカラムがadmin_passにしていたのが原因でした。。。
venderディレクトリのDatabaseUserProviderクラスの関数retrieveByCredentialsで
if (empty($credentials) ||
(count($credentials) === 1 &&
array_key_exists('password', $credentials))) {
return;
}
上記処理が描いていたためarray_key_exists('password', $credentials)で引っかかっていたので
カラムをpasswordに変更しまいした!!

投稿2020/07/20 03:32

mshmash

総合スコア23

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問