【问题标题】:Laravel Route Post not allowed不允许 Laravel 路由帖子
【发布时间】:2016-03-29 09:46:30
【问题描述】:

我正在尝试在 laravel 中创建路由帖子,我使用“get”并且它工作正常,但是当我使用“post”、“delete”等不起作用时,它返回错误 500(内部服务器错误)。

有我的路线代码

    Route::post('Register' ,function(){
    return "Hello World";
});

我正在使用谷歌浏览器“高级 REST 客户端”的扩展来执行一个“帖子”,这给了我这些信息

Request headers 
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36
Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo
Content-Type: application/json 
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: pt-PT,pt;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: XSRF-TOKEN=


Response headers 
Host: localhost:60967
Connection: close
X-Powered-By: PHP/5.5.12
Cache-Control: no-cache, private 
date: Wed, 23 Dec 2015 01:51:29 GMT
Content-type: text/html

我正在寻找几个小时,但找不到解决方案。

【问题讨论】:

  • 您需要检查日志文件。也许你遇到了laravel.com/docs/5.1/routing#csrf-protection的问题
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。stackoverflow.com/help/mcve

标签: php laravel


【解决方案1】:
  1. 您是否尝试过转储自动加载

    composer dump-autoload
    
  2. 您是否检查过路线是否列出?

    php artisan route:list
    
  3. 您是否真的在使用帖子(使用表单或类似 POSTman 的应用)

【讨论】:

    【解决方案2】:

    您的 XSRF 令牌丢失。默认情况下,新 Laravel 应用程序中的所有路由都开启了 CSRF 保护。

    您需要将有效令牌添加到您的 POST 请求标头,或者通过设置 _token 将有效令牌添加到 POST 数据本身。

    如果您只是需要测试 POST 路由本身,您可以暂时禁用 CSRF 中间件,或根据具体情况应用它。

    禁用
    app/Http/Kernel.php

    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, //Comment this out
        ],
        'api' => [
            'throttle:60,1',
        ],
    ];
    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    ];
    

    作为路由中间件启用
    app/Http/Kernel.php

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        ],
        'api' => [
            'throttle:60,1',
        ],
    ];
    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'csrf' => \App\Http\Middleware\VerifyCsrfToken::class, //Move it here
    ];
    

    【讨论】:

    • 随时。请记住:CSRF 保护是强烈推荐的。如果您出于测试目的暂时禁用它,那很好。但我强烈建议在全球范围内重新启用它,或者至少在任何接受用户输入的路由上手动应用它。
    • 我是php和laravel的新手,我不知道,我去搜索一下,并尝试实现。
    • 不用担心。 Here's the latest documentation on CSRF Protection。如果您不在 5.2 上,右上角有一个下拉菜单可帮助您找到正确的文档。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 2018-10-04
    • 2015-09-06
    • 2016-09-18
    • 2016-05-02
    相关资源
    最近更新 更多