外部post请求,怎么取消当前地址的POST请求的csrf_token验证

外部post请求,怎么取消请求的csrf_token验证,不是取消全部
已邀请:
app/Http/Middleware/VerifyCsrfToken.php

加个属性
<?php
class VerifyCsrfToken extends BaseVerifier
{
/**
 * The URIs that should be excluded from CSRF verification.
 *
 * @var array
 */
protected $except = [
            'wechat',   //路由的名称

];
}
?>

skjun286 - 对WEB和服务器感兴趣的宅男

赞同来自: seed

Laravel 5的话
看了一下, 比较粗暴直接的做法就是这样:
例如请求的网址是domain.com/uri1

\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php
该文件 查找 if ($this->isReading($request) || $this->tokensMatch($request))
修改为
if ($this->isReading($request) || $this->tokensMatch($request) || \Request::path() == 'uri1')

就可以了.

不过更好的做法其实应该是这样的, 就是麻烦一些..
http://www.camroncade.com/disa ... el-5/

motecshine - 菜鸟

赞同来自:

routes.php

用户余额

Route::get('/balance','HomeController@BalanceView');
Route::post('/getProduct', ['middleware' => 'tokenVerify','uses'=>'HomeApiController@getProduct']);

微信接入 取消Csrf_Token验证

Route::any('/wechat','WechatInitController@init');

kernel
protected $routeMiddleware = [
    'tokenVerify'=>'App\Http\Middleware\VerifyCsrfToken',
    'auth' => 'App\Http\Middleware\Authenticate',
    'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
    'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
];

yt319921208

赞同来自:

不好用, 我的大部分都要csrf。这个我要一个个设置,而且资源路由没办法使用csrf了

小楼

赞同来自:

外部请求多带个参数,绕开csrf,另外走一套验证不就可以了吗?

iat

赞同来自:

同求解决方法,先用csrf_token()获取$token,然后在post中添加'_token' = $token也不可以哎

月夜守望

赞同来自:

不受 CSRF 保护的 URIs
有时候你可能会希望一组 URIs 不要被 CSRF 保护。例如,你如果使用 Stripe 处理付款,并且利用他们的 webhook 系统,你需要从 Laravel CSRF 保护中,排除 webhook 的处理路由。

你可以在 VerifyCsrfToken 中间件中增加 $except 属性来排除 URIs:

<?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 = [
'stripe/
',
];
}

X-CSRF-TOKEN

cuihua - 生如灿烂之花

赞同来自:

有几个地方这里是留有坑的,新手很容易踩进去。这里贴一下 萧晔离 的答案。
链接是 http://wenda.golaravel.com/question/1093
这里只增加 protected $except属性是还不行的

在handle方法里面还要加一个判断,具体看上面链接。

而且上面 $except属性里面需要填写的不是路由器名称而是接受外部post的url
例如我的路由为下面的
Route::post('postTextMessage/wechat', ['as' => 'aaa', function()
{
//
// echo $name = Route::currentRouteName();
'WechatController@postTextMessage';
}]);



protected $except = [

'postTextMessage/wechat'

];
详细可以在VerifyCsrfToken里面输出一下$request就清晰了

wenhuijang - phper一枚

赞同来自:

可以直接参考版本5.1来实现csrf的不校验功能。
/**
 * Determine if the request has a URI that should pass through CSRF verification.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return bool
 */
protected function shouldPassThrough($request)
{
    $excepted_csrf = \Config::get('params.excepted_csrf');
    $all_except = array_merge($this->except, (array)$excepted_csrf);
    foreach ($all_except as $except) {
        if ($request->is(trim($except, '/'))) {
            return true;
        }
    }
    return false;
}

要回复问题请先登录注册