laravel 5.2 身份验证 - 缺少链接

Posted

技术标签:

【中文标题】laravel 5.2 身份验证 - 缺少链接【英文标题】:laravel 5.2 authentication - Missing Links 【发布时间】:2016-04-08 17:12:36 【问题描述】:

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

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

现在有时当我离开浏览器一段时间后似乎出现问题,然后回到网站,它开始表现得很奇怪。该应用程序会丢失有关当前登录用户的信息。如果我转到主页(网站的实际主页,而不是登录后的页面),那么登录页面(“/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:: 参数和当前登录的用户。

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

【问题讨论】:

【参考方案1】:

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

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

例子:

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

在这种情况下,如果您未通过身份验证,则转到“mustbeauthed”将重定向您,如果您通过身份验证,则让您通过它。

【讨论】:

以上是关于laravel 5.2 身份验证 - 缺少链接的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 5.2 中使用多重身份验证 [关闭]

在 laravel 5.2 中使用默认身份验证路由对用户进行身份验证后设置会话数据

Laravel 5.2 - 方法身份验证不存在

Laravel 5.2 身份验证不起作用

身份验证问题 Laravel 5.2 登录仅在本地工作

如何在 Laravel 5.2 中创建多重身份验证