首页 > 解决方案 > Laravel 6 - Auth::guard('user')->user 返回 null

问题描述

我在 Laravel 中创建了一个多重身份验证。当我使用用户登录时,在登录后方法中进行调试时,在 Auth::guard('user')->attempLogin ..... 我看到一个用户,但在重定向到 HomeController 之后返回 null。

如何解决?我是 Laravel 的初学者。

谢谢!!!

/routes/auth/user.php

Route::prefix('backoffice')->name('user.')->namespace('User')->middleware('user')->group(function () {
Auth::routes();
Route::get('home', 'HomeController@index')->name('home');

});

/routes/web.php

Route::group(['middleware' => 'web'], function() {

require 'auth/user.php';

Route::get('/', function () {
    return view('welcome');
});
Route::get('/home', 'HomeController@index')->name('home');
Route::resource('cadastro', 'CadastroController');

});

/app/Controllers/User/Auth/LoginController - @post 登录

public function login(Request $request) {
    $credentials = [
        'username' => $_POST['username'],
        'password' => $_POST['password']
    ];

    Auth::guard('user')->attempt($credentials, false);


    //dd('auth', Auth::guard('user'));

    return redirect()->intended('/backoffice/home');

}

/app/Controllers/用户/HomeController

public function __construct()
{
    $this->middleware('user');
    dd('after middleware', Auth::guard('user'), Auth::guard('user')->user());

}


public function index()
{
    return view('user.home');
}

标签: phplaravelauthentication

解决方案


默认情况下,Laravel 不附带 auth guard user。也许您打算使用webguard ie Auth::guard('web')Auth::guard()->user()如果用户已登录,则应返回已登录的用户对象。

此外,用于检查登录用户的默认中间件是auth,而不是user。因此,您的路线可能如下所示:Route::prefix('backoffice')->name('user.')->namespace('User')->middleware('auth')->group(function () {});,除非您在app/Http/Kernel.php $routeMiddleware数组中使用别名定义了一个自定义中间件user


推荐阅读