token详解

匿名 (未验证) 提交于 2019-12-03 00:32:02

获取token值

public function getCsrfToken() {     session()->regenerateToken();    $token=  csrf_token();    return response()->json(['token'=>$token]); }
{!! csrf_field !!}

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">  该段代码等同于全局帮助函数csrf_field的输出:

Blade模板引擎中还可以使用如下方式调用:

{!! csrf_field() !!}


<?php      namespace App\Http\Middleware;      use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;      class VerifyCsrfToken extends BaseVerifier     {         /**          * 指定从 CSRF 验证中排除的URL          *          * @var array          */         protected $except = [             'testCsrf'         ];     }

<meta name="csrf-token" content="{{ csrf_token() }}">
$.ajaxSetup({     headers: {         'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')     } });


public function start() {     $this->loadSession();      if (! $this->has('_token')) {         $this->regenerateToken();     }      return $this->started = true; }



VerifyToken 是中间件 -> handle()->isReading(判断请求的方式 排除get,head,options) -> showPassThough 判断 路由是否在$except 内排除 做了排除也不验证 最后通过 TokenMatch 方法判断 CSRF TOKEN 值和SESSION 中的TOKEN 是否相等 相同则通过验证

否则 抛出异常 :tokensMatch方法首先从Request中获取_token参数值,如果请求中不包含该参数则获取X-CSRF-TOKEN请求头的值,如果该请求头也不存在则获取X-XSRF-TOKEN请求头的值,需要注意的是X-XSRF-TOKEN请求头的值需要调用Encrypterdecrypt方法进行解密。





public function handle($request, Closure $next) {     if ($this->isReading($request) || $this->shouldPassThrough($request) || $this->tokensMatch($request)) {         return $this->addCookieToResponse($request, $next($request));     }      throw new TokenMismatchException; }


文章来源: token详解
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!