路由之POST请求(三)

作者: 寒云暮雨 | 来源:发表于2019-10-14 10:20 被阅读0次

这一次我们讲POST请求
post请求和get请求的定义方式一样,只不过在laravel中为了安全,post请求会有csrf限制
老规矩,上代码

<?php

namespace App\Http\Controllers\Web;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class IndexController extends Controller
{
    //
    public function index()
    {
        return view('welcome');
    }

    public function add(Request $request)
    {
        return $request->all();
    }
}

路由

<?php

Route::get('/', 'IndexController@index');
Route::post('/add', 'IndexController@add');

我们定义了一个post请求,在命令行执行,起一个web服务

php artisan serve

我们用post进行模拟post请求


post请求测试

服务端返回419页面,遇到这样的情况怎么处理呢?
1、解除当前路由的限制
修改learnLaravel\app\Http\Middleware\VerifyCsrfToken.php文件中的代码,将路由/add加入到$except数组中,表示这个路由不受csrf防护

<?php

namespace App\Http\Middleware;

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

class VerifyCsrfToken extends Middleware
{
    /**
     * Indicates whether the XSRF-TOKEN cookie should be set on the response.
     *
     * @var bool
     */
    protected $addHttpCookie = true;

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        //
        '/add'
    ];
}

我们再次用postman模拟post请求,结果如下图


image.png

2、增加token验证
新建页面,内容如下

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>

        <!-- Fonts -->
        <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">

        <!-- Styles -->
    </head>
    <body>
    <form action="{{url('/add')}}" method="post">
        @csrf
        <input type="submit">
    </form>
    </body>
</html>

查看页面源码


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Laravel</title>

    <!-- Fonts -->
    <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">

    <!-- Styles -->
</head>
<body>
<form action="http://127.0.0.1:8000/add" method="post">
    <input type="hidden" name="_token" value="F8eL5FrA5scHvqR0SAyQoaNEbL1bLLNyqetjNYcJ">        <input type="submit">
</form>
</body>
</html>

我们发现@csrf被转化成了

    <input type="hidden" name="_token" value="F8eL5FrA5scHvqR0SAyQoaNEbL1bLLNyqetjNYcJ">      

我们再次修改F:\web\learnLaravel\app\Http\Middleware\VerifyCsrfToken.php中的文件移除$except数组中的/add

<?php

namespace App\Http\Middleware;

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

class VerifyCsrfToken extends Middleware
{
    /**
     * Indicates whether the XSRF-TOKEN cookie should be set on the response.
     *
     * @var bool
     */
    protected $addHttpCookie = true;

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


打开我们的页面点击提交表单,数据正常提交,419限制也没有了,至此我们post请求常见问题讲解完毕。

相关文章

  • 路由之POST请求(三)

    这一次我们讲POST请求post请求和get请求的定义方式一样,只不过在laravel中为了安全,post请求会有...

  • Laravel 学习笔记

    路由 文件位置: app/Http/routes.php 基础路由get/post 多请求路由 路由参数 路由别名...

  • 微服务架构

    pre:在请求被路由之前调用 route:在路由请求时被调用 post:在 route 和 error 过滤器之后...

  • thinkphp5.0 路由传参和路由参数获取

    一、路由定义 在路由配置文件router.php中 二、路由参数传递的三种方式(以post请求为例) 1. 在UR...

  • 27 - express 渲染表单 并发送post请求

    需求:当接受到/路由的时候使用ejs渲染form.ejs,然后发送post请求当点击提交的时候,发出post请求,...

  • Koa2教程(入门篇)

    目录一、get请求接收的实现二、原生post请求接收的实现三、原生路由的实现四、使用cookie五、html模板六...

  • Node学习(9)--网络操作

    Node.js 路由 要为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数...

  • nodejs_路由

    路由:路径由来。 为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执...

  • 对数据进行一些基本操作(四)

    接收post请求(vue+axios)解决跨域问题(三) 效果预览 node路由配置增删改查 Vue代码更新 ht...

  • 记一次使用post请求重启TP-LINK TL-WDR7661路

    目的: 通过Post请求来重启TP-LINK路由器大致流程: ①获取登录请求的地址 ②获取重启请求的地址 前言 ...

网友评论

    本文标题:路由之POST请求(三)

    本文链接:https://www.haomeiwen.com/subject/srwlmctx.html