簡體   English   中英

我在Laravel中獲得Auth :: user為空

[英]I get Auth::user is null in Laravel

我使用以下代碼為管理員角色創建中間件:

php artisan make:middleware AdminMiddleware

之后,我為登錄頁面創建一個路由:

Route::get('admin/login', ['middleware'=>'web','as'=>'admin.login','uses'=>'AdminController@loginView']);
Route::post('admin/login',['middleware'=>'web','as'=>'admin.login','uses'=>'AdminController@login']);
Route::group(['prefix'=>'admin','middleware' => ['auth.admin','web']],     function()
{
    Route::get('/', ['as'=>'admin.home','uses'=>'AdminController@index']);
    Route::get('/home',    ['as'=>'admin.home','uses'=>'AdminController@index']);
});

控制器是

class AdminController extends Controller
{
    //
    function index(){
        return 'welcome';
    }

    function loginView(){
        return view('admin.login');
    }

    function login(Request $request){
        $error = $this->validate($request, [
            'email' => 'required|email',
            'password' => 'required|min:5',
        ]);
        $email = $request->input('email');
        $password = $request->input('password');
        $remember = $request->input('remember');

        if (Auth::attempt(['email' => $email, 'password' => $password,'type'=>'admin'], $remember)) {

            // Authentication passed...
            Auth::login(Auth::user(), $remember);
            return redirect()->route('admin.home');
        }
        else{//('message', 'Login Failed')
            return redirect()->route('admin.login')->withErrors($request->all(), "message")->withInput();
        }
    }
}

並且在AdminMiddleware中

public function handle($request, Closure $next)
{
    var_dump(Auth::user());
    if(!Auth::check()){
        return redirect()->route('admin.login')->withErrors('You are not logged in');
    }
    elseif ($request->user()->type != 'admin'){
        dd($request->user());
        return redirect()->route('admin.login')->withErrors('You have not authority');
    }
    return $next($request);
}

錯誤是:對於AdminMiddleware中的每個$ request-> user()或Auth:user,我總會得到null。

您正在以錯誤的順序將中間件傳遞給路由組。

現在,您具有以下順序['auth.admin', 'web'] ,這意味着auth.admin中間件將在來自web組的中間件之前執行,並且由於web包含StartSession中間件,因此您將沒有任何中間件auth.admin中的會話,這是獲取經過身份驗證的用戶所必需的。

因此,只需像這樣切換中間件順序即可:

Route::group(['prefix'=>'admin','middleware' => ['web', 'auth.admin']], function () {
    // now the session is set up in `web` and then you have it in `auth.admin`
});

就我而言,實際的問題是PHP開始標記之前的空白行。

我使用了以下核心PHP函數進行重定向,而不是從控制器返回視圖文件或使用Laravel重定向。

header('Location: /');

它打印出具有空白行的實際文件。 刪除此行解決了我的問題。

我的代碼庫中有成千上萬個文件。 我的假設是,我嘗試過使用不同的腳本在任何文件的開頭查找此類空白行,並且根據這些腳本的結果沒有此類文件。 我認為我的任何文件中都沒有空白行。 但是header('Location:/')證明我的假設沒有錯,並且我在錯誤的行上工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM