2017-07-28 29 views
1

Laravel 5.4認証ファサードが動作しません。 authミドルウェアは正常に機能します。保護されたルートへの呼び出しにより、期待どおりにログインページが生成されます。不正な資格情報が予想されるエラーを生成します。正しい資格情報が正しいページを生成します。 "Illuminate \ Support \ Facades \ Auth;"という行をコメントアウトする期待どおりエラー "クラス 'App \ Http \ Controllers \ Admin \ Auth' not found"が生成されます。laravel 5.4認証ファサードが動作しない

特に、Auth :: check()はfalseを生成し、ログインに成功したにもかかわらずAuth :: user()は何も返しません。 Authファサードのこれらの実装のいずれかを呼び出すことでエラーは発生しません。

このコードはLaravel 5.2でうまくいきました。私が知っている手順からの唯一の逸脱は、Laravel 5.4への移行中に、新しいLaravel実装で "php artisan make:auth"コマンドを実行しなかったことです。

「laravel 5.4 auth facadeが機能しません」という検索は、Bingまたはstackoverflow内部検索エンジンで関連する結果を生成しません。

関連のあるコードが下に、表示されます、私は、正確な結果を返すためのAuth ::チェック()のために希望の結論

namespace App\Http\Controllers\Admin; 

use Illuminate\Http\Request; 

use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use App\User; 
use App\Models\Admin; 
use App\Models\Role; 
use App\Models\Role_user; 
use App\Models\Client; 
use App\Models\Contact; 
use App\Models\PublicPages; 
use App\Models\Survey_question; 
use App\Models\Survey_item; 
use App\Models\Survey_project; 
use App\Models\State; 
use App\Models\Test_post; 
use App\Models\Registration; 
use Hash; 
use Redirect; 
use DB; 
use Illuminate\Support\Facades\Auth; 
use App\Classes\RoleHelper; 
use App\Classes\CommonCode; 

class AdminController extends Controller 
{ 
var $obj_logged_in_user; 
var $arr_logged_in_user; 
var $bool_has_role; 
var $roleHelper; 
//organization of function 
// 1. __construct 
// 2. index 
// get, alphabetically 
// post, alphabetically 

public function __construct(
     Role_user $role_user, RoleHelper $roleHelper, Request 
$request) 
{ 

    $this->middleware('auth'); 
    echo "<pre>"; 
    echo "admin controller, line 50<br>"; 
    print_r($request->user); 
    echo "</pre>"; 
    // line 49 (request->user) produces nothing 

    if (Auth::check()) 
    { 

     $this->middleware('role:admin'); 
     $this->obj_logged_in_user = Auth::user(); 
print_r($this->obj_logged_in_user); 
// line 58 (print_r) produces nothing 
     $this->arr_logged_in_user = $roleHelper->prepare_logged_in_user_info($this->obj_logged_in_user); 

    } // end if Auth::check() 

} // end __construct function 

と認証のための::ユーザー()にログインしたユーザー返すためにオブジェクト。前もって感謝します。

+1

コンストラクタでは使用できません。この時点ではミドルウェアは実行されませんでした。 – tkausl

+0

セッションはミドルウェアに設定されていないため、ユーザーは認証ファサードから離れません。これはコントローラを使用する正しい方法ではありませんが、アンチパターンの例です。 – Ohgodwhy

答えて

0

__construct()メソッド内でAuth関数を使用する場合は、クロージャー内の$this->middleware()に渡す必要があります。

public function __construct(Role_user $role_user, RoleHelper $roleHelper) 
{ 
    $this->middleware('auth'); 
    $this->middleware('role:admin'); 
    $this->middleware(function ($request, $next) use ($role_user, $roleHelper) { 

     if (Auth::check()) { 

      $this->obj_logged_in_user = Auth::user(); 
      $this->arr_logged_in_user = $roleHelper->prepare_logged_in_user_info($this->obj_logged_in_user); 

     } 

     return $next($request); 
    }); 
} 

また、ちょうどFYI、あなたはそれが簡単にLaravelが付属してdump()またはdd()機能を使用することを見つけるかもしれません。代わりに、書き込みの:

echo "<pre>"; 
echo "admin controller, line 50<br>"; 
print_r($request->user); 
echo "</pre>"; 

あなたの代わりに書くことができます:

dump('admin controller, line 50', $request->user); 

https://laravel.com/docs/5.4/helpers#method-dd

この情報がお役に立てば幸い!

+0

ただし、認証ミドルウェアを設定すると、ログインしていないユーザーはリダイレクトされます。ユーザーがログインしているかどうかを確認する方法はありますか? – Benubird

+0

@Benubird '$ this->ミドルウェア( 'auth');ビット(そしておそらく' role:admin'ビットも含む)を含めないでください。 –

+0

ミドルウェアを終了すると、Auth :: userがnullを返し、Auth :: checkがfalseを返します。 – Benubird

関連する問題