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

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

ただいまの
回答率

88.92%

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

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 171

mshmash

score 16

前提・実現したいこと

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

発生している問題

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

該当のソースコード

<?php
//namespaceはdirectory配下のファイルを自動読み込みを行うことができるようにしています。
namespace App\Http\Controllers\Admin;
//laravelのコントローラーを継承する為
use App\Http\Controllers\Controller;
//管理者情報のデータを取得する為
use App\Table\Admin\AdminInfo;
//Admin
use \App\Http\Requests\Admin\AdminLoginRequest;

//hash処理
use Illuminate\Support\Facades\Hash;
//認証処理
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;

class LoginController extends Controller
{ 
    /*ログイン画面*/
    public function loginAdmin()
    {          
      return view('Admin/login');
    }

    /*ログイン処理*/
    public function mainAdmin(AdminLoginRequest $request)
    {           
      $admin_pass = AdminInfo::where('admin_id',$request->admin_id)->value('admin_pass');

      if (Hash::check($request->admin_pass, $admin_pass)) { //入力値, hash_pass
          $credentials = $request->only('admin_id', 'admin_pass'); //管理者情報部分取得

          if(Auth::attempt($credentials)){
            \Log::debug(Auth::attempt($credentials));
            \Log::debug('認証成功');

              return view('Admin/Main/main',compact('admin_id','admin_pass'));
              //return redirect('/')->with('flash_message', '登録完了!');

          }else{
              \Log::debug('認証失敗');
              return redirect()->back();
          }
      }else{
          //echo "password違います";
      }
    }

    /*
    ログアウト処理
    */
    public function logout(){
      //
      \Log::debug('ログアウト OK!');
      Auth::logout();
      return redirect('/')->with('flash_message', 'ログアウト');
    }

    /*管理者追加*/
    public function adminAdd()
    {
      return view('Admin/Admin/add');
    }
    /*管理者追加完了*/
    public function adminAddComp(Request $request)
    {
      //userIdの取得 requestの値
      $admin_id = $request['admin_id'];
      $admin_pass = $request['admin_pass'];
      $admin_name = $request['admin_name'];
      $memo = $request['memo'];

      $admin_pass = Hash::make($admin_pass);

      $user_infos = AdminInfo::create(['admin_id' => $admin_id,'admin_pass' => $admin_pass,'admin_name' => $admin_name,'memo' => $memo]);

      return view('Admin/Admin/comp',compact('admin_id','admin_pass','admin_name','memo'));
    }
}
<?php

return [

    //user情報とadmin情報
    'defaults' => [
        'guard' => 'web',
        'passwords' => 'admin_infos',//authの書き換え
    ],



    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'admin_infos',
        ],
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],



    'providers' => [
        'admin_infos' => [
            'driver' => 'eloquent',
            'model' => App\Table\Admin\AdminInfo::class,
        ],
    ],



    'admin_infos' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],

    'password_timeout' => 10800,

];
<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

// Route::get('/',function () {
//     return view('UserInfo/Public/info');
// });
/*login*/
Route::get('Admin/login','Admin\LoginController@loginAdmin');

/*main*/
Route::post('Admin/Main/main','Admin\LoginController@mainAdmin');

/*★AdminAdd*/
Route::post('Admin/Admin/add','Admin\LoginController@adminAdd');

/*★AdminAddcomp*/
Route::post('Admin/Admin/comp','Admin\LoginController@adminAddComp');

/*list*/
Route::get('Admin/UserInfo/info','Admin\AdminController@userList');

// /*edit*/
 //Route::get('Admin/UserInfo/Edit','Admin\AdminController@userEdit');
 Route::get('Admin/UserInfo/Edit','Admin\AdminController@userEdit');
// Route::get('Admin/UserInfo/Edit/{id}',function($id){

// });
/*edit_conf*/
Route::post('Admin/UserInfo/Edit/conf','Admin\AdminController@userEditConf');

/*edit_comp*/
Route::post('Admin/UserInfo/Edit/comp','Admin\AdminController@userEditComp');

/*add*/
Route::get('Admin/UserInfo/Add','Admin\UserAddController@userAdd');

/*Add_conf*/
Route::post('Admin/UserInfo/Add/conf','Admin\UserAddController@userAddConf');

/*Add_comp*/
Route::post('Admin/UserInfo/Add/comp','Admin\UserAddController@userAddComp');

/*User_Delete_Conf*/
Route::post('Admin/UserInfo/Delete/conf','Admin\UserDeleteController@userDeleteConf');

/*User_Delete_Conf*/
Route::post('Admin/UserInfo/Delete/comp','Admin\UserDeleteController@userDeleteComp');

試したこと

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

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

・Laravel version7
・mysql
・windows10

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+2

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/19 18: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)
    上記のやりかた今後参考になりますので本当にありがとうございました。
    ※管理者とユーザーの判別で!!

    キャンセル

  • 2020/07/19 18:42

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

    キャンセル

  • 2020/07/20 07:34

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

    キャンセル

check解決した方法

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る