laravel-5.5 - Auth::guard('memberweb')->user() 重定向后返回 null
问题描述
我正在使用 laravel-modules 包“ https://nwidart.com/laravel-modules/v3/introduction ”以更好地构建我的应用程序。
我有一个使用位于 App 中的工匠命令“make::auth”创建的用户模型,以及一个位于 Modules 文件夹内的成员模型。
问题是,在我使用成员守卫登录并重定向到 /member/profile Auth::guard('memberweb')->user() 后总是返回 null。但是如果我在 MemberLoginController 的登录方法中使用 dd(Auth::guard('memberweb')->user()) :
/**
* Member Login
*
* @return void
*/
public function login(Request $request)
{
$this->validate($request, [
'email' => 'required|email',
'password' => 'required',
]);
// Attempt to log the member in
if (Auth::guard('memberweb')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember)) {
// if successful, then redirect to their intended location
dd(Auth::guard('memberweb')->user());
return redirect()->intended(route('memberProfile'));
}
// if unsuccessful, then redirect back to the login with the form data
return redirect()->back()->withInput($request->only('email', 'remember'))->with('error','your credentials donnot match our records');
}
该对象按预期返回。看起来在被重定向后,成员会注销。
我的 config.auth.guards 看起来像这样:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'memberweb' => [
'driver' => 'session',
'provider' => 'members',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'memberweb-api' => [
'driver' => 'token',
'provider' => 'members',
],
],
还有我的 Kernel.php:
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'memberAuth' => \Modules\Member\Http\Middleware\RedirectIfMemberAuthenticated::class,
'role' => \App\Http\Middleware\Roles::class,
'permission' => \App\Http\Middleware\Permissions::class,
];
我究竟做错了什么?
解决方案
问题出在 routes.php 文件中。您还需要在身份验证之前添加网络防护。
所以,例如,我的 route.php 看起来像这样:
<?php
Route::group(['middleware' => ['auth','role:developer|admin']],
function()
{
Route::get('/dashboard/users', 'Modules\User\Http\Controllers\UserController@index')->name('dashboardUsers');
Route::get('/dashboard/user/{id}/edit', 'Modules\User\Http\Controllers\UserController@edit')->name('dashboardEditUserView');
Route::post('/dashboard/user/{id}/edit', 'Modules\User\Http\Controllers\UserController@update')->name('dashboardEditUserView');
});
但应该是这样的:
<?php
Route::group(['middleware' => ['web','auth','role:developer|admin']],
function()
{
Route::get('/dashboard/users', 'Modules\User\Http\Controllers\UserController@index')->name('dashboardUsers');
Route::get('/dashboard/user/{id}/edit', 'Modules\User\Http\Controllers\UserController@edit')->name('dashboardEditUserView');
Route::post('/dashboard/user/{id}/edit', 'Modules\User\Http\Controllers\UserController@update')->name('dashboardEditUserView');
});
推荐阅读
- c - fscanf 在第 254 行数据后停止从文本文件中读取
- autohotkey - 如何显示我所在的特定电源方案?
- vb.net - LINQ中两个Lamba表达式之间的区别
- java - 使用新的 Google Cloud 日志记录 jar 时,日志未显示在 Google Cloud Platform Stackdriver 中
- reactjs - 反应输入值在子组件中不起作用
- linux - 重新启动现有 docker 容器时如何指向初始运行时
- xml - 我得到这个“主要输出文件的系统标识符未知;” 使用 xsl:result-document 时出错
- ionic-framework - 与用户共享 Ionic Framework 应用程序以在真实设备上进行测试
- c++ - 将按值返回向量的函数作为 ublas::element_prod() 的参数传递有什么问题?
- python - 如何在 python 中比较 "hello:"=="hello"