laravel 5.2 身份验证 - 缺少链接

laravel 5.2 authentication - Missing Links

我是 laravel 框架的新手,正在尝试为网站建立身份验证。发生了一些非常奇怪的事情,我无法弄清楚出了什么问题。

我发出 php artisan make:auth 命令,我可以看到相应的文件在控制器和 resources/views 下生成。我能够登录并查看主页(登录后)。我也可以注销,到目前为止一切正常。

现在,当我离开浏览器一段时间,然后回到网站时,有时似乎会出现问题,它开始表现得很奇怪。该应用程序丢失了有关当前登录用户的信息。如果我转到主页(网站的实际主页而不是登录后的页面),则不会显示登录页面(“/login”)。我必须手动注销(通过在 url 中键入“/logout”)然后尝试登录 url 以查看登录表单。

这是我的路线文件:

Route::get("/", "PagesController@home")->name("home");
Route::get("/search/{query}","APIController@index")->name("search");
Route::get("/searchBook/{id}","APIController@searchBook")->name("searchBook");
Route::get("/stories","PagesController@stories")->name("stories");
Route::get("/user/{id}/deleteBooks/{book_id}","UserController@deleteBooks")->name('user.delete.books');
Route::get("/user/{id}/showBooks/{book_id}","UserController@showBooks")->name('user.show.books');

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

此外,应用程序本身似乎并没有真正负责身份验证。我必须在很多步骤中手动检查身份验证(通过 Auth::check()),这很痛苦。例如在很多地方我必须手动做

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

这是一个更新:给我带来问题的路由没有放在 routes.php 文件中的网络中间件下。所以当我将相关路由放在 web 中间件下时,我实际上能够访问所有 Auth:: 参数和当前登录用户。

这是否意味着我必须将所有 "logged-in" 路由(登录后可用的路由)放在网络中间件中?那么 /login、/logout 路由...它们应该放置任何中间件吗?

您需要会话(Auth 使用)的任何路由都需要应用“web”中间件组。

如果您想进行身份验证检查,您可以使用 'auth' 中间件,它将为您进行这些检查。

示例:

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

在这种情况下,如果您未通过身份验证,前往 'mustbeauthed' 会将您重定向,如果您通过身份验证,则让您通过。