我可以在laravel控制器文件中的函数外进行授权检查吗?

时间:2017-05-09 13:46:32

标签: php laravel controller authorization

每次在laravel中调用函数之前,我都会检查请求ajax链接的人是否已登录。 我必须将此检查功能放在每个函数中以使其工作。如果我在函数外写,它只是打印

  

请登录以查看此内容的工作。

即使我已登录。有没有办法将检查功能放在控制器文件的开头,所以我不必每次都在函数内部写它。

  function index()
                if(!\Auth::check()) 
                return response()->json(array(
                    'status'=>'error',
                    'message'=> 'Please login to see this content'
                ));
    return redirect('/login')->with('msgstatus', 'error')->with('messagetext','Please login to see this content'); }

    function loadcalendar()
                if(!\Auth::check()) 
                return response()->json(array(
                    'status'=>'error',
                    'message'=> 'Please login to see this content'
                ));
    //somedefinition 
  }  
    function savecalendar()
                if(!\Auth::check()) 
                return response()->json(array(
                    'status'=>'error',
                    'message'=> 'Please login to see this content'
                ));
    //somedefinition 
}

4 个答案:

答案 0 :(得分:1)

来自Laravel文档:

  

即使可以确定用户是否经过身份验证   使用check方法,您通常会使用中间件进行验证   在允许用户访问之前,用户已通过身份验证   某些路线/控制器。要了解更多相关信息,请查看   关于保护路线的文件。

https://laravel.com/docs/5.4/authentication#protecting-routes

有内置中间件可以做到这一点:

定义:

public function __construct()
{
    $this->middleware('auth');
}
例如,在控制器中,

将检查该控制器上针对auth中间件的每个方法。

答案 1 :(得分:1)

是。你可能想要在这里构建:

 public function __construct()
    {
        $this->middleware('auth');
    }

现在每项功能都需要验证。

答案 2 :(得分:1)

在你的控制器中, 添加此构造函数方法。这将使用内置的Auth中间件并将任何未登录的用户重定向到登录页面

blade.php

答案 3 :(得分:1)

听起来你正在寻找middleware

开箱即用的laravel有一个auth中间件,用于检查用户是否已登录。要保护控制器上的特定路线,只需将其添加到您的路线中:

Route::get('/', 'YourController@index')->middleware('auth');

或在构造函数或控制器中定义它:

public function __construct()
{
    $this->middleware('auth');
}

使用构造函数方法时,您还可以指定应该检查中间件的方法。

public function __construct()
{
    $this->middleware('auth');

    $this->middleware('log')->only('index');

    $this->middleware('subscribed')->except('store');
}

请参阅文档中的Controller Middleware