【问题标题】:Laravel restful api error 500(store and destroy)Laravel restful api 错误 500(存储和销毁)
【发布时间】:2016-06-02 10:05:43
【问题描述】:

我是restful api的新手,遇到了一个问题,问题是:当我用delete方法请求destroy和用post方法存储时,都会返回500错误。但是我用get方法请求索引和显示,两者没问题。有什么问题?这是我的代码和要求:

删除 http://***.com/RestfulPrac/public/customers/10000001

获取 http://***.com/RestfulPrac/public/customers/10000001

发布 http://***.com/RestfulPrac/public/customers


 class CustomersController extends Controller
 {
    public function index(){

    $customersInfo = customers::all();
    return $customersInfo;

    }

    public function show($cust_id){

    $customer = customers::where('cust_id',$cust_id)->first();
    return $customer;
    }
    public function store()
    {

    echo "store";
    }

   public function destroy()
   {

      return "success";
   }
}

Route::resource('customers','CustomersController');

apache access.log : "DELETE /RestfulPrac/public/customers/1000000001 HTTP/1.0" 500 20246 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"

apache 错误日志: [Thu Jun 02 09:09:24.324782 2016] [negotiation:error] [pid 4328:tid 1676] [client 127.0.0.1:4940] AH00690:没有可接受的变体:D:/XAMPP/apache/error/HTTP_NOT_FOUND.html。变量

laravel.log: local.ERROR:F:\PhpstormProjects\RestfulPrac\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php 中的异常“Illuminate\Session\TokenMismatchException”:67 堆栈跟踪:

如果有人可以帮助我,我将不胜感激!提前致谢!

【问题讨论】:

  • 你有没有查看 laravel 的错误日志,看看是否有任何内容,或者 webserver 的错误日志?
  • @lagbox 我已经编辑了帖子
  • 显示和索引方法对我来说没问题..但是存储和销毁不起作用
  • 你能检查一下存储/日志中的laravel日志和你的apache error.log吗

标签: laravel laravel-5 laravel-routing laravel-request


【解决方案1】:

根据 Laravel 错误日志,您的 csrf 令牌不匹配。如果您正在构建 API,您可能不想使用“网络”中间件。该中间件组正在启动一个会话,并将在所有未使用 READ(GET、HEAD、OPTIONS)HTTP 方法的请求上检查 csrf 令牌。

默认情况下,当 Laravel 在 app\Providers 中的 RouteServiceProvider 中加载它们时,Laravel 会将所有路由放在 routes.php 中应用了“网络”中间件的路由组中(如果版本 >= 5.2.27)。

根据 Laravel 错误日志,这可能是开始的地方。

这可能会有所帮助:VerifyCsrfToken always called when route to API Middleware Laravel 5.2.35

【讨论】:

  • 没问题。如果你在做一个无状态的 api,你根本不需要“web”中间件组。如果你想要会话,你会想要它。您可以在该中间件的 $except 数组中从 csrf 检查中排除您的 api 路由,如果您觉得需要使用“web”组,可以在 URI 中使用通配符。
【解决方案2】:

只需导航到app\kernel.php

这样评论csrf

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        //  \App\Http\Middleware\VerifyCsrfToken::class,
    ],

    'api' => [
        'throttle:60,1',
    ],
];

如果您正在构建 api,则不需要 csrf 保护

【讨论】:

  • 也谢谢你!!
猜你喜欢
  • 2021-02-04
  • 2015-03-06
  • 2014-02-17
  • 1970-01-01
  • 2016-08-09
  • 2016-06-06
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多