【发布时间】:2019-04-25 02:26:48
【问题描述】:
我有一个通过用户身份验证保护的管理面板。一旦我尝试访问它,它就会将我重定向到使用“guest”中间件的登录表单(这是预期的行为)。 一旦我尝试登录,它就会像魅力一样工作,将我重定向到管理仪表板并创建 Auth 对象(我可以检索名称)。 但是,如果我单击面板内的任何链接,或按 F5,它会将我重定向回登录表单。为了测试发生了什么,我从管理面板中删除了“auth”中间件保护,当我尝试检索 Auth::user()->name 属性时它给了我一个错误。
Trying to get property 'name' of non-object
所以我假设它在每次页面刷新时都会破坏 Auth 对象,但我不明白这种行为的来源。 我正在使用默认的 Auth 中间件,以及文档中提供的 LoginController(进行了一些调整):
<?php
namespace App\Http\Controllers\Authentication;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
public function authenticate(Request $request){
$email = $request->input('email');
$password = $request->input('password');
$remember = $request->input('remember');
if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
return redirect()->intended('dashboard');
}
}
public function index(){
return view('auth.login');
}
}
管理面板中的所有路由都在我的路由文件中的一个组内:
Route::middleware(['auth'])->group(function () {
//All of the admin routes here
});
登录路由受“guest”中间件保护,因此没有经过身份验证的用户可以访问登录表单。
请让我发布您认为可能有帮助的任何代码,我对 Laravel 还很陌生,不知道该发布什么。
【问题讨论】:
-
可能是会话没有持久化。请检查
config/session.php中的driver是否不是数组。更多信息laravel.com/docs/5.7/session -
要使用
Auth::user()->name,您需要使用命名空间Auth;例如:use Auth; -
@AdrianHernandez-Lopez
driver设置为 file :'driver' => env('SESSION_DRIVER', 'file'),文件实际上位于 storage/framework/sessions 文件夹中。 -
@Patrick 我已经在使用它了。这不是问题,因为它是第一次工作。我登录,它把我重定向到管理页面(它显示用户名,所以它工作正常)。问题是当我刷新页面或尝试导航到不同的路线时,它似乎消除了会话并将我再次重定向到登录表单。
-
有什么特殊原因不使用默认
Auth::routes();和运行php artisan make:auth时生成的默认LoginController?
标签: php laravel session laravel-5.7