从第三方API发布到Laravel 5(Post to Laravel 5 from 3rd par

2019-10-23 03:34发布

我使用Laravel 5建立一个基本的应用程序。

我使用第三方短信网关这需要短信和POST的结果,我的应用程序。 我在本地测试它使用邮差为Chrome和Requestb.in

我的问题:当我尝试发布到我的应用程序,我得到了“哎呦”错误从Laravel,状态代码405。

我的预感:我有一种感觉,这是因为默认CSRF失败的。 该请求是从我的应用程序的生态系统外部到来。

在我的路线,我有:

Route::post('/sms/', 'SMSController@create');

SMSController:

public function create(Request $request)
    {
       //keeping it simple for now
        return view('hello');
    }

问:这是问题,如果是这样,我怎么从只有一个路由禁用CSRF。

非常感谢!

Answer 1:

你可以改变处理方法app/Http/Middleware/VerifyCsrfToken.php这样做。

class VerifyCsrfToken extends BaseVerifier {

    protected $excludes = [ // Route patterns
        'sms',
        'sms/*'
    ];

    public function handle($request, Closure $next)
    {
        foreach ($this->excludes as $pattern) 
        {
            if ($request->is($pattern)) 
            {
                return $next($request);
            }
        }

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

更新

据Laravel文档 ,从Laravel 5.1+你可以将它们添加到定义应该从CSRF验证中排除的URI的$except在VerifyCsrfToken中间件的性能。

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier
{
    protected $except = [
        'sms/*',
    ];


Answer 2:

我刚刚意识到L5现在已经排除列表的功能:

<?php namespace APPNAMESPACE\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 = [
          'example1',
          'example2/example3',
    ];
}


Answer 3:

应该得到令牌不匹配错误,不幸的是CSRF是烤 - 这里是一个方法来扩展中间件,加入的排除列表:

https://laracasts.com/discuss/channels/general-discussion/l5-disable-csrf-middleware-on-certain-routes



Answer 4:

试图像你所有不同的选项后,我的搜索停止,当我发现简单的短代码通过所有的api/*在调用app/Http/Middleware/VerifyCsrfToken.php只需更换该代码,

public function handle($request, Closure $next)
{   
    if( ! $request->is('api/*')){
        return parent::handle($request, $next); 
    }

    return $next($request);
}

它的工作原理就像魅力Laravel 5.虽然,新laravel 5.1,这可能与该代码来完成,

class VerifyCsrfToken extends BaseVerifier
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        //
    ];
}

这可以在这里找到Laravel VerifyCsrfToken.php



文章来源: Post to Laravel 5 from 3rd party API