Я сделал страницу входа / регистрации в Laravel, и она работает нормально, но я хочу защитить маршруты, разрешив только аутентифицированным пользователям доступ к URL-адресу.
Это мой web.php:
Route::get('/', [ 'uses' => 'UserController@getLogin', 'as' => 'login' ]); Route::get('/signup', [ 'uses' => 'UserController@getSignup', 'as' => 'signup' ]); Route::get('/logout', [ 'uses' => 'UserController@getLogout', 'as' => 'logout' ]); Route::group(['prefix' => 'app'], function(){ Route::post('/newuser', [ 'uses' => 'UserController@postSubmitSignup', 'as' => 'submitsignup' ]); Route::post('/submitsignup', [ 'uses' => 'UserController@postSubmitLogin', 'as' => 'submitlogin' ]); Route::get('/home', [ 'uses' => 'UserController@getDashboard', 'as' => 'dashboard' ])->middleware('auth'); // I also tried 'middleware' => 'auth', ends in same thing });
В моем UserController.php:
public function getSignup(){ $organizations = Organizations::all()->where('deleted', '0')->all(); return view('pages.signup', ['organizations' => $organizations]); } public function getLogin(){ return view('pages.login'); } public function getDashboard(){ return view('pages.dashboard'); } public function getLogout(){ Auth::logout(); return redirect()->route('login'); } public function postSubmitSignup(Request $request){ $newuser = new User(); $newuser->firstname = $request['firstname']; $newuser->lastname = $request['lastname']; $newuser->username = $request['username']; $newuser->email = $request['email']; $newuser->password = bcrypt($request['password']); $newuser->passwordhint = $request['passwordhint']; $newuser->organization = $request['organization']; $newuser->location = $request['location']; $newuser->phone = $request['phone']; $newuser->signupnote = $request['remarks']; $newuser->save(); return redirect()->route('login'); } public function postSubmitLogin(Request $request){ if(Auth::attempt(["username" => $request['username'], "password" => $request['password']])){ return redirect()->route('dashboard'); } session()->flash('invalid', 'Bad Credentials'); return redirect()->back()->withInput(); }
изpublic function getSignup(){ $organizations = Organizations::all()->where('deleted', '0')->all(); return view('pages.signup', ['organizations' => $organizations]); } public function getLogin(){ return view('pages.login'); } public function getDashboard(){ return view('pages.dashboard'); } public function getLogout(){ Auth::logout(); return redirect()->route('login'); } public function postSubmitSignup(Request $request){ $newuser = new User(); $newuser->firstname = $request['firstname']; $newuser->lastname = $request['lastname']; $newuser->username = $request['username']; $newuser->email = $request['email']; $newuser->password = bcrypt($request['password']); $newuser->passwordhint = $request['passwordhint']; $newuser->organization = $request['organization']; $newuser->location = $request['location']; $newuser->phone = $request['phone']; $newuser->signupnote = $request['remarks']; $newuser->save(); return redirect()->route('login'); } public function postSubmitLogin(Request $request){ if(Auth::attempt(["username" => $request['username'], "password" => $request['password']])){ return redirect()->route('dashboard'); } session()->flash('invalid', 'Bad Credentials'); return redirect()->back()->withInput(); }
И когда я пытаюсь войти с действительными учетными данными, я получаю следующее сообщение об ошибке, и, похоже, URL-адрес http://website.com/login
но страница входа находится по адресу http://website.com/
:
Sorry, the page you are looking for could not be found. 1/1 NotFoundHttpException in RouteCollection.php line 161: in RouteCollection.php line 161 at RouteCollection->match(object(Request)) in Router.php line 780 at Router->findRoute(object(Request)) in Router.php line 610 at Router->dispatchToRoute(object(Request)) in Router.php line 596 at Router->dispatch(object(Request)) in Kernel.php line 267 at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 53
Когда я пытаюсь получить доступ к URL-адресу панели управления напрямую, я получаю ту же ошибку. Как я должен делать это правильно и было бы здорово, если бы кто-нибудь мог объяснить, почему это происходит.
Вам необходимо сгруппировать маршруты, как показано ниже.
Route::group(['middleware' => 'auth'], function(){ Route::get('/logout', [ 'uses' => 'UserController@getLogout', 'as' => 'logout' ]); // and your other routes which you wanna protect }
Теперь маршрут выхода и другие маршруты, которые вы добавите туда, будут доступны только для аутентифицированных пользователей, простым словам пользователя, который вошел в систему.