我正在使用Laravel 5.1,很久以前我一直在寻找这个问题的答案,但我一直没有成功。
当超级管理员尝试登录时会发生此问题。整个登录过程在AJAX中实现,因此当登录发生时,AJAX等待重定向URL,同时验证过程由Auth Controller执行。
如果请求正常,则将仪表板URL发送回ajax,但是一旦重定向执行,中间件就会将其记录下来。
验证超级管理员的auth WelcomeController看起来像这样(这很好用,提供了propper重定向网址):
\Config::set('auth.model', 'App\Super_Admin');
$sadmin = \Auth::createEloquentDriver();
\Auth::setProvider($sadmin->getProvider());
//Admin verification
if(\Auth::attempt(['system_admin_user' => $request->username, 'password' => $request->password])) {
\Auth::user()->setAttribute('profile','SuperAdmin');
\Session::set('sadmin_name',\Auth::user()->system_admin_fullname);
return response()->json(['login_status' => 'success', 'redirect' => 'SuperAdmin/dashboard', 'error' =>'']);
}
else {
return response()->json(['login_status' => 'invalid', 'error' => 'Usuario y/o password invalidos', 'redirect' => '/']);
}
处理中间件is_admin中的请求的功能看起来像这样(不按预期工作):
public function handle($request, Closure $next)
{
if(\Auth::check() && \Auth::user()->profile == "SuperAdmin") {
return redirect('/');
}
else {
return response('Unauthorized.', 401);
}
return $next($request);
}
我还尝试使用不同的中间件代码:
public function handle($request, Closure $next)
{
if(!\Auth::check() || \Auth::user()->profile != "SuperAdmin") {
$this->auth->logout();
}
return $next($request);
}
为admin管理的路由组定义如下:
Route::group(['middleware' => ['auth','is_superAdmin']], function() {
Route::get('SuperAdmin/dashboard','Super_Admin\SuperAdminController@index');
});
提前谢谢你!
答案 0 :(得分:0)
我想知道问题是否是:
\Auth::user()->setAttribute('profile','SuperAdmin');
不坚持。
您可能不想在DB记录中设置/更改该字段。也许你真正想要的只是设置一个会话变量,表明用户是SuperAdmin