2016-01-05 7 views
0

Я новичок в laravel framework и пытаюсь создать аутентификацию для веб-сайта. Есть что-то действительно странное, что происходит, и я не могу понять, что случилось.laravel 5.2 authentication - Missing Links

Я выдаю команду php artisan make: auth, и я мог видеть, что соответствующие файлы генерируются под контроллерами и ресурсами/представлениями. Я могу войти и посмотреть домашнюю страницу (после входа в систему). Я также могу выйти из системы, и все работает плавно до сих пор.

сейчас иногда возникает проблема, когда я когда-либо отсутствую в браузере, и возвращаюсь на сайт, он начинает действовать странно. приложение теряет информацию о текущем зарегистрированном пользователе. Если я перейду на домашнюю страницу (фактическую домашнюю страницу сайта, а не страницу после входа в систему), страница входа в систему («/ login») не появится. Мне нужно вручную выйти из системы (набрав «/ logout» в URL-адресе), а затем попробуйте ввести URL-адрес входа в систему.

это мой маршруты файл:

Route::get("/", "[email protected]")->name("home"); 
Route::get("/search/{query}","[email protected]")->name("search"); 
Route::get("/searchBook/{id}","[email protected]")->name("searchBook"); 
Route::get("/stories","[email protected]")->name("stories"); 
Route::get("/user/{id}/deleteBooks/{book_id}","[email protected]")->name('user.delete.books'); 
Route::get("/user/{id}/showBooks/{book_id}","[email protected]")->name('user.show.books'); 

Route::group(['middleware' => 'web'], function() { 
    Route::auth(); 
    Route::resource('user', 'UserController'); 
    Route::get('/user/{user}/books',"[email protected]")->name('user.get.books'); 
    Route::post("/user/{user}/createBooks","[email protected]")->name('user.create.books'); 
    Route::get('/home', '[email protected]')->name("dashboard"); 
    Route::post("/savemap","[email protected]")->name("savemap"); 
}); 

Кроме того, кажется, приложение само по себе не очень заботясь о проверке подлинности. Мне приходится вручную проверять аутентификацию (по Auth :: check()) на множестве шагов, и это больно. Например, на многих местах я должен вручную делать

if (Auth::check()) { 
     // some code 
    } 
    else{ 
     Auth::logout(); 
     return redirect()->route('home'); //named route 
    } 

Это обновление: Маршрут, который дает мне проблемы не был помещен под веб-промежуточного слоя в routes.php файле. Поэтому, когда я разместил соответствующий маршрут под промежуточным программным обеспечением Интернета, я действительно смог получить доступ ко всем параметрам Auth :: и текущему зарегистрированному пользователю.

Означает ли это, что я должен разместить все мои «входные» маршруты (доступные маршруты после входа в систему) внутри промежуточного программного обеспечения? и как насчет маршрутов/login/logout ... Должны ли они быть местами промежуточного ПО?

ответ

1

Любой необходимый вам маршрут (который использует Auth) должен иметь «web».

Если вы хотите выполнить проверку подлинности, вы можете использовать промежуточное программное обеспечение 'auth', которое будет выполнять эти проверки для вас.

Пример:

Route::group(['middleware' => ['web', 'auth']], function() { 
    Route::get('mustbeauthed', '[email protected]'); 
}); 

В этом случае происходит в «mustbeauthed» перенаправит вас прочь, если вы не авторизованы и позволяют пройти к нему, если вы идентифицируются.