laravel 5.5 关闭token的3种实现方式

关闭token的3种实现方式

1. 关闭基于Token的CSRF防护

在 Laravel 5.5 版本之前,Laravel 都是采用基于 Token 的 CSRF 防护级别,这可以保证应用的安全性。但是在某些特定情况下,用户可能会希望关闭基于 Token 的 CSRF 防护,以免给开发过程带来不必要的烦恼。这时可以通过修改 Kernel.php 文件来实现:打开 App\Http\Kernel.php 文件,找到 $middlewareGroups 属性中名为 web 的配置数组,在该配置数组的 $middleware 属性中添加如下代码:

protected $middlewareGroups = [

'web' => [

// ...

\App\Http\Middleware\VerifyCsrfToken::class => function ($request, $next) {

return $next($request);

},

],

];

通过将 VerifyCsrfToken::class 中间件定义成一个匿名函数,就可以关闭基于 Token 的 CSRF 防护了。

2. 关闭路由级别的CSRF防护

除了可以在全局关闭基于 Token 的 CSRF 防护之外,还可以在单个路由上关闭 CSRF 防护,Laravel 提供了一个 csrf_exempt 方法,可以在对应单个路由上进行设置。使用该方法时,在路由定义中调用 csrf_exempt 方法即可,例如:

Route::post('/api/posts', [

'middleware' => 'auth.basic',

'uses' => 'PostController@store'

])->csrf_exempt();

这样就可以在单个路由上关闭 CSRF 防护了。

3. 关闭CSRF防护组件

最后一种关闭 CSRF 防护的方法是直接关闭 CSRF 防护组件,这种方法需要修改 VerifyCsrfToken.php 文件。位于 App\Http\Middleware 目录下的 VerifyCsrfToken.php 文件是 Laravel 提供的默认 CSRF 防护中间件。如果要关闭 CSRF 防护,只需要在此文件中修改它的 handle 方法,并将其中的代码全部注释掉即可,例如:

class VerifyCsrfToken extends Middleware

{

/**

* The URIs that should be excluded from CSRF verification.

*

* @var array

*/

protected $except = [

//

];

/**

* Handle an incoming request.

*

* @param \Illuminate\Http\Request $request

* @param \Closure $next

* @return mixed

*/

public function handle($request, Closure $next)

{

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

return $next($request);

}

}

通过将 parent::handle($request, $next) 注释掉,就可以关闭 CSRF 防护组件了。

总之,关闭 CSRF 防护需要谨慎,并应该根据实际情况进行判断。如果必须关闭 CSRF 防护,建议对代码进行备份或使用其他安全性相对较高的方案代替。

后端开发标签