我正在开发一个在一台服务器上使用静态文件而在另一台服务器上使用api的webapp。前端采用角度和后端使用laravel开发。
在首次加载期间CSRF-TOKEN
抓取时,在角度run block
内我有此代码
if(!$cookies.get('XSRF-TOKEN')){
$http.get(API+'/csrf_token').success(function(d){
$cookies.put('XSRF-TOKEN',d.XSRF_TOKEN);
//$cookies.put('laravel-session',d.LARAVEL_ID);
//$http.defaults.headers.common.X-CSRF-TOKEN = 'Basic YmVlcDpib29w';
//$http.defaults.headers.post['X-CSRF-TOKEN']=$cookies.get('XSRF-TOKEN');
$http.defaults.headers.post['X-CSRF-TOKEN']=d.XSRF_TOKEN;
});
我试图获得同样的另一种方式是使用this方式。
同时设置$httpProvider.defaults.withCredentials = true;
以便将Cookie与请求一起发送。
路线/csrf_token
设置为
Route::get("/csrf_token", function(){
//return \Response::json("asd",200)->withCookie(cookie("XSRF-TOKEN",csrf_token()));
return csrf_token(); //\Crypt::encrypt(csrf_token())
});
所有ajax POST
请求都会抛出TokenMismatchException in VerifyCsrfToken.php line 67:
。
接下来,我发送csrf_token
参数作为_token
附加了帖子参数,仍然是同样的问题。
尝试上述所有操作,从/csrf_token
返回加密令牌,但仍然存在相同问题。
在api服务器中重复清除config:cache和composer dumpautoload的所有步骤,但仍然存在同样的问题。
审核了配置文件,一些值 -
'driver' => env('SESSION_DRIVER', 'file'),
'encrypt' => false,
'files' => storage_path('framework/sessions'),
'secure' => false,
(这些值似乎没问题) 接下来回顾了CORS配置的虚拟配置文件(内部目录标记)
Header set Access-Control-Allow-Origin "www.mydomain.com" #real domain not posted
Header set Access-Control-Allow-Credentials 'true'
Header always set Access-Control-Max-Age "2000"
Header set Access-Control-Allow-Headers 'X-CSRF-TOKEN'
Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require local
浪费时间谷歌搜索。(沮丧)。需要帮助。
注意:我无法在stackoverflow上找到类似于令牌不匹配问题的教程/答案,也没有找到我未尝试过的任何其他网站。感谢。