php - 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');
}
解决方案
默认情况下,Laravel 不附带 auth guard user
。也许您打算使用web
guard 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
推荐阅读
- scala - Scala Stream.grouped 将整个流缓冲到内存中
- javascript - Telerik 剑道图表绑定到字符串
- excel - 在 Excel 中,我如何创建一个总和来为五个不同的字符串赋值
- c# - 属性基类无效返回签名
- reactjs - React:对不同的路线使用不同的布局
- apache - 如何使用 LDAP/Limit 和 AuthzSVNAccessFile 配置 Apache/Subersion 路径
- asp.net - 相同的参数和方法名称,控制器如何在 ASP.NET Core MVC 中找到调用哪一个
- javascript - 如何从子BottomTabBarNavigator TabItem单击在DrawerNavigator上调用openDrawer
- android - 当我向后端发出请求时,如何锁定我的 BottomNavigationView?
- sql - 无法在 MS Access 中跨联合分配别名