Laravel 5 middlware奇怪的行为

时间:2017-05-16 21:00:51

标签: php ajax laravel-5 laravel-middleware

我正在使用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');
});

提前谢谢你!

1 个答案:

答案 0 :(得分:0)

我想知道问题是否是:

\Auth::user()->setAttribute('profile','SuperAdmin');

不坚持。

您可能不想在DB记录中设置/更改该字段。也许你真正想要的只是设置一个会话变量,表明用户是SuperAdmin