laravel 5.2身份验证 - 缺少链接

时间:2016-01-05 00:10:36

标签: php authentication laravel-5.2

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

我发布了php artisan make:auth命令,我可以看到在控制器和资源/视图下生成相应的文件。我可以登录并查看主页(登录后)。我也可以退出,到目前为止一切顺利。

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

这是我的路线档案:

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中间件下。因此,当我将相关路由放在Web中间件下时,我实际上能够访问所有Auth ::参数和当前登录用户。

这是否意味着我必须放置所有"登录" Web中间件内部的路由(登录后可用的路由)?那些/ login,/ logout路由呢......它们应该放在任何中间件上吗?

1 个答案:

答案 0 :(得分:1)

您需要会话的任何路线(Auth使用的路线)需要具有' 网络'中间件组应用。

如果您想进行身份验证,可以使用' auth'中间件会为你做那些检查。

示例:

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

在这种情况下,去“必须”和“#39;如果您未经过身份验证,则会将您重定向,如果您通过身份验证,则会将其传递给您。