欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

禁用laravel CSRF中间件 修改 csrf 验证 有大用 有大用 有大用

见下面红色部分 

5禁用laravel CSRF中间件


opilo在2年前

我注意到CSRF的中间件应用到所有岗位和默认的删除请求。反正是要禁用它,只把它应用于选定的路线吗?

感谢

 
adaojunior说2年前

我删除了“照亮\基础\ \ \ verifycsrftoken HTTP中间件的应用程序/ HTTP / kernel.php。

	protected $middleware = [
		'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
		'Illuminate\Cookie\Middleware\EncryptCookies',
		'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
		'Illuminate\Session\Middleware\StartSession',
		'Illuminate\View\Middleware\ShareErrorsFromSession',
		'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken',
	];

没有人知道是否有另一种方式吗?

jimgwhit说2年前

对不起,注入这里,但是你已经标记为解决方案,但仍有一个问题。我想知道正确的方式也关掉它。

opilo说2年前

jimgwhit说:

对不起,注入这里,但是你已经标记为解决方案,但仍有一个问题。我想知道正确的方式也关掉它。

你是对的,我重新打开话题。

alexanderwright说2年前

我会编辑你的应用程序/ HTTP /中间件/ verifycsrftoken.php变化如下:

public function handle($request, Closure $next)
{
        // Add this:
        if($request->method() == 'POST')
        {
		return $next($request);
        }

	if ($request->method() == 'GET' || $this->tokensMatch($request))
	{
		return $next($request);
	}
	throw new TokenMismatchException;
}

显然你可以添加其他的条件,比如检查的起源,等等。

jimgwhit说2年前

我没有程序/ HTTP /中间件/ verifycsrftoken.php文件或文件夹。

edrands说2年前

的verifycsrftoken中间件被吸收到不久前的实际框架,所以你不会在任何新安装laravel 5发现文件。

igaster说2年前

CSRF的现在是一个“中间件”的应用HTTP \ kernel.php全球注册。删除它会默认没有CSRF保护(laravel4行为)。

在路线使它:

创建应用程序/供应商/ routeserviceprovider.php手短的关键:

protected $middleware = [
  // ....
  'csrf'  => 'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken',
];

你现在可以到任何路线:

$router->post('url', ['middleware' => 'csrf', function() {
 ... 
}]);

不是最完美的解决方案,IMO.。

偏题的:

形成后应CSRF的检查。但是关于Ajax调用RESTful API请求等???我认为Laravel不应该这么固执…

nmabhinandan说2年前

igaster说:形成后应CSRF的检查。但是关于Ajax调用RESTful API请求等???我认为Laravel不应该这么固执…

确切地

foxandxss说2年前

在我看来,如果他们可以容易改变框架的意见也不差。

使用一些前端框架和智威汤逊laravel认证,有以任何方式,但如果你可以禁用它,把它从中间件列表没有CSRF的需要,这是不错的。

我想在Laravel心里有一些目标,提供一些最常见的应用标准。如果除此之外,它可以让你超越这些标准,为我好。

李瓦西说2年前

为什么你认为你不需要检查的AJAX / API调用CSRF?如果API,你可能有一个不同的身份验证方法(例如头),但Ajax调用一样容易受到CSRF非Ajax的。

我们在我们的应用程序所做的就是添加一个<meta name="csrf-token" content="{{{ Session::token() }}}">在我们的<head>进入全部页,我们抽象的Ajax调用自定义函数的所有调用都将自动标记。只是一点点的前期工作,与额外的工作的时候,但我们所有的Ajax端点也防止CSRF。

(实际上我们使用RESTful API端点的AJAX,认证可以通过会话,或通过基于API的客户,非浏览器的标题和跳过非Ajax调用,CSRF检查但这超出了本文的范围回答。)

israelshirk说2年前

这个帖子是老一点的但是在谷歌排名高;所以抱歉回复晚了-它的后代:)

适当的方式使用中性的默认行为App\Http\Middleware\VerifyCsrfToken从你5应用中间件将laravel尼克斯从APP/HTTP / kernel.php。之前:

	protected $middleware = [
		'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
		'Illuminate\Cookie\Middleware\EncryptCookies',
		'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
		'Illuminate\Session\Middleware\StartSession',
		'Illuminate\View\Middleware\ShareErrorsFromSession',
		'App\Http\Middleware\VerifyCsrfToken',
	];

后:

	protected $middleware = [
		'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
		'Illuminate\Cookie\Middleware\EncryptCookies',
		'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
		'Illuminate\Session\Middleware\StartSession',
		'Illuminate\View\Middleware\ShareErrorsFromSession',
	];

或者,假设你只有休息做的事情,你可以摆脱所有的相关中间件的开销,你可能会最终取代自定义认证/授权中间件以后:

	protected $middleware = [
	];

在任何一种混合API /终端用户应用任何这将是坏的形式,等等,等等,等等。您可以启用/禁用按航线基础上类似于“igaster上面的评论。

jnewing说2年前

一个简单的选择是什么,我需要让一个RESTful API请求后创建自己的中间件,扩展了VerifyCsrfToken,然后加入你自己的排斥作用。在更换一个App/Http/Kernal.php用你自己的。我喜欢这个我想保持CSRF打开(放)我认为这只是一个必须的安全。

在这个例子中,我打电话给我VerifyCsrf

文件:App\Http\Middleware\VerifyCsrf.php

<?php namespace App\Http\Middleware;

class VerifyCsrf extends \Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
{
    /**
     * Routes we want to exclude.
     *
     * @var array
     */
    protected $routes = [
            'api/some/route',
            'another/route/here',
            'yup/more/routes',
    ];

     /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     *
     * @throws \Illuminate\Session\TokenMismatchException
     */
    public function handle($request, \Closure $next)
    {
        if ($this->isReading($request) 
            || $this->excludedRoutes($request) 
            || $this->tokensMatch($request))
        {
            return $this->addCookieToResponse($request, $next($request));
        }

        throw new \TokenMismatchException;
    }

    /**
     * This will return a bool value based on route checking.

     * @param  Request $request
     * @return boolean
     */
    protected function excludedRoutes($request)
    {
        foreach($this->routes as $route)
            if ($request->is($route))
                return true;

            return false;
    }

}

然后我把它换了App\Http\Kernel.php

<?php namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{

	/**
	 * The application's global HTTP middleware stack.
	 *
	 * @var array
	 */
	protected $middleware = [
		'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
		'Illuminate\Cookie\Middleware\EncryptCookies',
		'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
		'Illuminate\Session\Middleware\StartSession',
		'Illuminate\View\Middleware\ShareErrorsFromSession',
		// 'App\Http\Middleware\VerifyCsrfToken',
                'App\Http\Middleware\VerifyCsrf',
	];

	/**
	 * The application's route middleware.
	 *
	 * @var array
	 */
	protected $routeMiddleware = [
		'auth' => 'App\Http\Middleware\Authenticate',
		'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
		'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
	];

}

msalom28说2年前

jnewing说:

一个简单的选择是什么,我需要让一个RESTful API请求后创建自己的中间件,扩展了VerifyCsrfToken,然后加入你自己的排斥作用。在更换一个App/Http/Kernal.php用你自己的。我喜欢这个我想保持CSRF打开(放)我认为这只是一个必须的安全。

在这个例子中,我打电话给我VerifyCsrf

文件:App\Http\Middleware\VerifyCsrf.php

<?php namespace App\Http\Middleware;

class VerifyCsrf extends \Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
{
   /**
    * Routes we want to exclude.
    *
    * @var array
    */
   protected $routes = [
           'api/some/route',
           'another/route/here',
           'yup/more/routes',
   ];

    /**
    * Handle an incoming request.
    *
    * @param  \Illuminate\Http\Request  $request
    * @param  \Closure  $next
    * @return mixed
    *
    * @throws \Illuminate\Session\TokenMismatchException
    */
   public function handle($request, \Closure $next)
   {
       if ($this->isReading($request) 
           || $this->excludedRoutes($request) 
           || $this->tokensMatch($request))
       {
           return $this->addCookieToResponse($request, $next($request));
       }

       throw new \TokenMismatchException;
   }

   /**
    * This will return a bool value based on route checking.

    * @param  Request $request
    * @return boolean
    */
   protected function excludedRoutes($request)
   {
       foreach($this->routes as $route)
           if ($request->is($route))
               return true;

           return false;
   }

}

然后我把它换了App\Http\Kernel.php

<?php namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{

  /**
   * The application's global HTTP middleware stack.
   *
   * @var array
   */
  protected $middleware = [
  	'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
  	'Illuminate\Cookie\Middleware\EncryptCookies',
  	'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
  	'Illuminate\Session\Middleware\StartSession',
  	'Illuminate\View\Middleware\ShareErrorsFromSession',
  	// 'App\Http\Middleware\VerifyCsrfToken',
               'App\Http\Middleware\VerifyCsrf',
  ];

  /**
   * The application's route middleware.
   *
   * @var array
   */
  protected $routeMiddleware = [
  	'auth' => 'App\Http\Middleware\Authenticate',
  	'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
  	'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
  ];

}

伟大的解决方案。谢谢!

filipeaclima说2年前

levacic @

我还开发了一个restfull API使用laravel致残的CSRF保护似乎是一个非常糟糕的主意给我,但是当一个客户端试图到达终点(路线),预计后,把或删除TokenMismatchException被抛出的应用

我做了,被覆盖tokensMatch功能照亮\基础\ \ \ verifycsrftoken HTTP中间件为了实现这一我添加以下App\Http\Middleware\VerifyCsrfToken(是的,我们的臭名昭著的中间件!),因为它已经延伸我们要重写的类:

/**
 * Determine if the session and input CSRF tokens match.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return bool
 */
protected function tokensMatch($request)
{
	$token = $request->input('_token') ?: $request->session()->getToken();

	if ( ! $token && $header = $request->header('X-XSRF-TOKEN'))
	{
		$token = $this->encrypter->decrypt($header);
	}

	return StringUtils::equals($request->session()->token(), $token);
}

别忘了加:

use Symfony\Component\Security\Core\Util\StringUtils;

总结起来,我所做的是把_token阶段而取它的默认Laravel的行为input

只是我的2美分,希望有帮助!

vineetgarg90说2年前
markgavalda说2年前

这看起来像一个优雅的解决方案vineetgarg90,谢谢分享。

jasonhoule说2年前

这是我做的是改变\程序\ \ \ verifycsrftoken HTTP中间件类检查路径,我不想有CSRF验证认证配置文件的方式。

public function handle($request, Closure $next)
{
        if(in_array($request->path(), Config::get('auth.no_csrf'))) {
            return parent::addCookieToResponse($request, $next($request));
        }
        return parent::handle($request, $next);
}

在我加入auth.php \配置\

'no_csrf' => array('nocsrf/path/1', 'no/csrf/path/2'),

我希望这有助于人

sambindoff说2年前

真的很好”jasonhoule tidy做事情的方式”在L5,谢谢!

dnamotoring说2年前

jasonhoule说:

这是我做的是改变\程序\ \ \ verifycsrftoken HTTP中间件类检查路径,我不想有CSRF验证认证配置文件的方式。

public function handle($request, Closure $next)
{
       if(in_array($request->path(), Config::get('auth.no_csrf'))) {
           return parent::addCookieToResponse($request, $next($request));
       }
       return parent::handle($request, $next);
}

在我加入auth.php \配置\

   'no_csrf' => array('nocsrf/path/1', 'no/csrf/path/2'),

我希望这有助于人

哇,谢谢!我被困了这么长时间才意识到我已禁用某些航线上和你的解决方案是最直接的CSRF。

顺便我不得不加:

use Config;

在verifycsrftoken.php上也给了我一个错误也没有发现。

lu32说2年前

很聪明的

jnewing说:

一个简单的选择是什么,我需要让一个RESTful API请求后创建自己的中间件,扩展了VerifyCsrfToken,然后加入你自己的排斥作用。在更换一个App/Http/Kernal.php用你自己的。我喜欢这个我想保持CSRF打开(放)我认为这只是一个必须的安全。

在这个例子中,我打电话给我VerifyCsrf

文件:App\Http\Middleware\VerifyCsrf.php

<?php namespace App\Http\Middleware;

class VerifyCsrf extends \Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
{
   /**
    * Routes we want to exclude.
    *
    * @var array
    */
   protected $routes = [
           'api/some/route',
           'another/route/here',
           'yup/more/routes',
   ];

    /**
    * Handle an incoming request.
    *
    * @param  \Illuminate\Http\Request  $request
    * @param  \Closure  $next
    * @return mixed
    *
    * @throws \Illuminate\Session\TokenMismatchException
    */
   public function handle($request, \Closure $next)
   {
       if ($this->isReading($request) 
           || $this->excludedRoutes($request) 
           || $this->tokensMatch($request))
       {
           return $this->addCookieToResponse($request, $next($request));
       }

       throw new \TokenMismatchException;
   }

   /**
    * This will return a bool value based on route checking.

    * @param  Request $request
    * @return boolean
    */
   protected function excludedRoutes($request)
   {
       foreach($this->routes as $route)
           if ($request->is($route))
               return true;

           return false;
   }

}

然后我把它换了App\Http\Kernel.php

<?php namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{

  /**
   * The application's global HTTP middleware stack.
   *
   * @var array
   */
  protected $middleware = [
  	'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
  	'Illuminate\Cookie\Middleware\EncryptCookies',
  	'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
  	'Illuminate\Session\Middleware\StartSession',
  	'Illuminate\View\Middleware\ShareErrorsFromSession',
  	// 'App\Http\Middleware\VerifyCsrfToken',
               'App\Http\Middleware\VerifyCsrf',
  ];

  /**
   * The application's route middleware.
   *
   * @var array
   */
  protected $routeMiddleware = [
  	'auth' => 'App\Http\Middleware\Authenticate',
  	'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
  	'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
  ];

}

eduardostuart说2年前

另一个解决方案:

<?php namespace App\Http\Middleware;

use Closure;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier {

	protected $excludeRoutes = [
		'api*'
	];

	/**
	 * Handle an incoming request.
	 *
	 * @param  \Illuminate\Http\Request  $request
	 * @param  \Closure  $next
	 * @return mixed
	 */
	public function handle($request, Closure $next)
	{
		foreach( $this->excludeRoutes as $route )
		{
			if( $request->is( $route ) ) return $next($request);
		}

		return parent::handle($request, $next);
	}

}
ricardoaat说2年前

eduardostuart说:

另一个解决方案:

<?php namespace App\Http\Middleware;

use Closure;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier {

  protected $excludeRoutes = [
  	'api*'
  ];

  /**
   * Handle an incoming request.
   *
   * @param  \Illuminate\Http\Request  $request
   * @param  \Closure  $next
   * @return mixed
   */
  public function handle($request, Closure $next)
  {
  	foreach( $this->excludeRoutes as $route )
  	{
  		if( $request->is( $route ) ) return $next($request);
  	}

  	return parent::handle($request, $next);
  }

}

这奏效了,谢谢你

holgerw1说2年前

另一个可能的解决方案(虽然不理想):

<?php namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
use Route;
use Closure;

class VerifyCsrfToken extends BaseVerifier {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $route = Route::getRoutes()->match($request);
        $routeAction = $route->getAction();
        if (isset($routeAction['nocsrf']) && $routeAction['nocsrf']) {
            return $next($request);
        }
        return parent::handle($request, $next);
    }

}

在你的routes.php然后你可以禁用特定的路线通过CSRF检查

    Route::any('test', [
        'as' => 'external.test',
        'uses' => 'TestController@test',
        'nocsrf' => true,
    ]);

解决的办法是不理想的因为我们手工做的路由匹配,毕竟全球中间件完成了再做(sendrequestthroughrouter)。所以我们产生一点点的开销有。

这种解决方案的优点是,您可以禁用CSRF的检查在你的routes.php你不需要改变的东西如果你的路由的名称或URL不会改变。即它是比较容易的方式重构/维护你的路线。

joetito1说2年前

如果你想为每个路由禁用CSRF,可以修改中间件/ verifycsrftoken.php类$除阵列是这样的:

protected $except = [
        '*',
];

这似乎是最干净的方式,无需修改laravel类。

李瓦西说2年前

holgerw1说:

另一个可能的解决方案(虽然不理想):

<?php namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
use Route;
use Closure;

class VerifyCsrfToken extends BaseVerifier {

   /**
    * Handle an incoming request.
    *
    * @param  \Illuminate\Http\Request  $request
    * @param  \Closure  $next
    * @return mixed
    */
   public function handle($request, Closure $next)
   {
       $route = Route::getRoutes()->match($request);
       $routeAction = $route->getAction();
       if (isset($routeAction['nocsrf']) && $routeAction['nocsrf']) {
           return $next($request);
       }
       return parent::handle($request, $next);
   }

}

在你的routes.php然后你可以禁用特定的路线通过CSRF检查

   Route::any('test', [
       'as' => 'external.test',
       'uses' => 'TestController@test',
       'nocsrf' => true,
   ]);

解决的办法是不理想的因为我们手工做的路由匹配,毕竟全球中间件完成了再做(sendrequestthroughrouter)。更the比赛方法的确比我们真的需要更多的(结合,…)。

这种解决方案的优点是,您可以禁用CSRF的检查在你的routes.php你不需要改变的东西如果你的路由的名称或URL不会改变。即它是比较容易的方式重构/维护你的路线。

其实你可以使用路线::current()获得当前匹配的路由

holgerw1说2年前

李瓦西说:其实你可以使用路线::current()获得当前匹配的路由

你遗憾的是不能使用路径::全球中间件current()自路由匹配的请求毕竟是全球中间件已经完成了。和CSRF验证者默认是所有路线全球中间件。

这将为特定的中间件虽然因为它们运行的路线路线匹配后的工作。

李瓦西说2年前

holgerw1说:

你遗憾的是不能使用路径::全球中间件current()自路由匹配的请求毕竟是全球中间件已经完成了。和CSRF验证者默认是所有路线全球中间件。

这将为特定的中间件虽然因为它们运行的路线路线匹配后的工作。

哎呀!你是,当然,正确的是。

我是新到15所以我还没有时间去探究框架看万物如何执行-但没有任何具体的原因之前运行的路线是中间件相匹配?是让它正在改变本身的要求?即便如此,我不确定我是否想改变URL的用户试图访问的,所以这对我很有意义,虽然我可能忽略的东西-它看起来像它可能匹配的路线我们运行中间件之前。

谢谢!

holgerw1说2年前

李瓦西说:

哎呀!你是,当然,正确的是。

我是新到15所以我还没有时间去探究框架看万物如何执行-但没有任何具体的原因之前运行的路线是中间件相匹配?是让它正在改变本身的要求?即便如此,我不确定我是否想改变URL的用户试图访问的,所以这对我很有意义,虽然我可能忽略的东西-它看起来像它可能匹配的路线我们运行中间件之前。

谢谢!

我真的不知道这个设计背后的真正原因,你应该去问Graham Campbell或Taylor Otwell。

这是kernel.php负责这一行为的代码:

    return (new Pipeline($this->app))
                    ->send($request)
                    ->through($shouldSkipMiddleware ? [] : $this->middleware)
                    ->then($this->dispatchToRouter());

正如你所看到的dispatchtorouter在全球中间件完成称为(通过命令)

恕我直言,如果线路匹配的请求将在全球中间件做了有利于被执行,因此如果中间件将访问路径数据。但我怀疑Graham或者泰勒会改变因为它意味着特定的代码的一些基本结构。

holgerw1说2年前

顺便说一下,这里的“官方”的回答,Taylor Otwell:https://github.com/laravel/framework/pull/9708

benjaminlistwon1年前的回答

而从人们迄今所做的,我做了以下。

在一个新的配置文件(所以我不要碰到升级碰撞)位于config/custom.php我创造了这个:

return [

    /*
    |--------------------------------------------------------------------------
    | CSRF Exemptions
    |--------------------------------------------------------------------------
    |
    | Routes we do not check for CSRF. Note: Should use other means of 
    | authenticating the origin, etc.
    |
    */

    'csrf_exempt_routes' => array(
    	'api/*',
    ),
	
];

注意你可以使用特定的航线foo/bar或通配符Foo / *匹配。不知道如果它允许更复杂的正则表达式。也,包括一个主导/

然后,在app/Http/Middleware/VerifyCsrfToken.php我把除了美元变量在配置这样的规定值:

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
use Illuminate\Contracts\Encryption\Encrypter;
use Config;


class VerifyCsrfToken extends BaseVerifier
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [];
	
	
    /**
     * Create a new middleware instance. We set our exceptions in a 
     * config file.
     *
     * @param  \Illuminate\Contracts\Encryption\Encrypter  $encrypter
     * @return void
     */
    public function __construct(Encrypter $encrypter)
    {
        parent::__construct($encrypter);
        $this->except = Config::get('custom.csrf_exempt_routes');
    }		
}

希望这种方法可以帮助别人。

额外的学分

我计划类Route最终我可以传递参数到路线的定义一样:

public function __construct($methods, $uri, $action, $options)

...

$options = array('disable_csrf' => true);
Route::get('/foo/', function () { ... }, $options);

...

这样,就不需要在配置复制路径规格,这一点容易出错。

basementjack1年前的回答

不知道这是否是新的5.1:HTTP:/ / laravel。COM /文档/ 5.1 /路由# CSRF排除URI

muhammadshakeel1年前的回答

你可以排除URI从CSRF通过简单地增加他们的$except财产的verifycsrftoken中间件:

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'api/*',
    ];
}

文件:http://laravel.com /文档/路由/ 5.1 # CSRF的保护

terrymol1年前的回答

嗨alexanderwright,你拯救我的时间

seunmatt说6个月前

在5.3to laravel排除路径从CSRF中间件检查打开应用程序\ \ \ verifycsrftoken.php中间件HTTP文件并添加路径到$除阵列。这样地

protected $except = [//"api/“/每一条路线开始/ API应检查]忽视CSRF;

注意通配符的路径定义的使用

andyschaafthp说6个月前

怎样使用$除了阵列和通配符?

 protected $except = [
    'mandrill/*',
    'pusher/*',
];

这是工作而无需重新定义verifycsrftoken中间件为我。

mylonasg88说6个月前

laravel 4.2

filters.php

Route::filter('csrf', function () {
    if(Config::get('auth.no_csrf')){
        return;
    }

    if (Session::token() !== Input::get('_token')) {
        throw new Illuminate\Session\TokenMismatchException('CSRF token not provided', 401);
    }
});

routes.php

Route::group(['after' => 'no-cache', 'prefix' => 'api/v1'], function () {
    // Disable CSRF protection
    Config::set('auth.no_csrf', true);

    Route::post('/test/search', ['auth.no_csrf' => 'val','uses' => 'Controllers\Api\SearchController@postSearch']);
});

 来自 https://laravel.io/forum/11-14-2014-disabling-the-csrf-middleware-in-laravel-5

普通分类: