我正在尝试在laravel中进行多重身份验证,并且在登录后,它会一直将我重定向回登录页面。我试图从登录控制器获取结果表单,所以做到了:
dd(Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password]));
返回true
然后我在中间件上做了同样的事情
dd(Auth::guard('admin')->check());
,它返回false
这是我的代码完整代码
模型/管理员
/**
* Admin Model
*/
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Admin extends Authenticatable
{
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
config / auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
]
],
提供者
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Model\Admin::class,
]
RouteServiceProvider
public function map()
{
$this->mapApiRoutes();
$this->mapAdminRoutes();
$this->mapWebRoutes();
//
}
protected function mapAdminRoutes()
{
Route::prefix('admin')
->namespace($this->namespace)
->group(base_path('routes/admin.php'));
}
routes / admin.php
Route::group(['middleware'=>'guest:admin','namespace'=>'Admin'],function (){
Route::get('login', 'AdminLoginController@showAdminLoginForm')->name('admin.login');
Route::post('login', 'AdminLoginController@adminLogin')->name('loginAdmin');
});
Route::group(['middleware'=>'auth:admin','namespace'=>'Admin'],function (){
Route::get('dashbord','DashbordController@index');
});
LoginController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
//use App\Http\Requests\Loginrequest;
use Illuminate\Http\Request;
use \Illuminate\Support\Facades\Auth;
class AdminLoginController extends Controller
{
public function showAdminLoginForm()
{
return view('auth.login');
}
public function adminLogin(Request $request)
{
if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password]))
{
//dd(Auth::guard('admin')->check());
//returns true
return redirect()->route('admin.dashbord');
//return redirect()->intended('/admin/dashbord');
}
return back()->withInput($request->only('email', 'remember'));
}
}
Middleware / RedirectIfAuthenticated.php
namespace App\Http\Middleware;
use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard('admin')->check()) {
// public const ADMIN = '/admin/dashbord';
return redirect(RouteServiceProvider::ADMIN);
}
else{
// public const HOME = '/home';
return redirect(RouteServiceProvider::HOME);
}
//return $next($request);
}
}