使用Laravel Sanctum时如何获取XSRF-TOKEN值?
Laravel Sanctum下获取XSRF-TOKEN的正确方式
方案一:不依赖全局变量获取匹配的XSRF-TOKEN
Laravel Sanctum中,csrf_token()返回的是会话原始CSRF令牌,而前端拿到的XSRF-TOKEN cookie是经过加密后的令牌,这是两者值不同的核心原因。要获取和前端一致的令牌值,可以通过以下两种方式:
解密请求中的
XSRF-TOKENcookie:
Laravel会自动加密XSRF-TOKEN存储,使用Crypt门面解密即可得到匹配的值:use Illuminate\Support\Facades\Crypt; $validXsrfToken = Crypt::decryptString($request->cookie('XSRF-TOKEN'));解密后的值与前端
Cookies.get('XSRF-TOKEN')完全一致,可直接用于Slack OAuth的state校验。从会话获取原始令牌再加密:
先拿到会话中的原始CSRF令牌,再用Crypt加密得到和cookie一致的字符串:use Illuminate\Support\Facades\Crypt; use Illuminate\Support\Facades\Session; $sessionToken = Session::token(); $validXsrfToken = Crypt::encryptString($sessionToken);
方案二:使用独立的唯一字符串(备选)
如果不想和CSRF机制耦合,也可以生成独立的随机字符串作为state:
- 生成随机字符串并存入会话:
use Illuminate\Support\Str; $state = Str::random(40); session(['slack_oauth_state' => $state]); - 回调时校验:
if ($request->input('state') !== session('slack_oauth_state')) { abort(403, '非法的state参数'); }
内容的提问来源于stack exchange,提问作者wonder95
相关产品推荐
相关产品推荐

