【问题标题】:Laravel Password Reset TokenLaravel 密码重置令牌
【发布时间】:2016-01-08 05:14:05
【问题描述】:

好的,这是非常初学者,但我想要一个解释。在下面的“postReset”方法中内置的Laravel密码重置中,它指定了“token”......但是,当使用{!! csrf_field() !!} 在视图中,它生成为输入 name="_token"。匹配名称时 _ 是否算作实际字符?只是混淆了数据库迁移如何使用“token”,但是 csrf 字段将输入名称设置为“_token”。

public function postReset(Request $request)
    {
        $this->validate($request, [
            'token' => 'required',
            'email' => 'required|email',
            'password' => 'required|confirmed|min:6',
        ]);

        $credentials = $request->only(
            'email', 'password', 'password_confirmation', 'token'
        );

        $response = Password::reset($credentials, function ($user, $password) {
            $this->resetPassword($user, $password);
        });

谢谢,

【问题讨论】:

  • _token 仅用于跨站点请求伪造而不用于重置密码,尽管您需要将input 名称为token 用于重置密码。

标签: laravel laravel-5


【解决方案1】:

您不需要_token 来重置或迁移密码。但是,如果您在 post 方法中向 laravel 发送任何输入,则绝对需要它。

Laravel 可以轻松保护您的应用程序免受跨站请求伪造 (CSRF) 攻击。跨站点请求伪造是一种恶意利用,代表经过身份验证的用户执行未经授权的命令。

Source

如何在我的表单中包含 csrf 令牌?

您可以在表单中包含 csrf 令牌

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

提示:

你可以处理里面的CSRF Token过滤器之后的动作

app\Http\Middleware\VerifyCsrfToken.php

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    在我的情况下,我在与 CSRF 无关之前面临同样的问题,因为我从他搜索第三段以从他用于重置的 url 获取令牌的代码中读取。 但是如果你使用本地化系统会在下面的屏幕中丢失它

    你可以做一些小工作来解决它

    @php
        $segments = \Request::segments();
        $token = end($segments);
    @endphp
    
    <form method="POST" action="{{ route('password.request') }}">
    {!!  csrf_field() !!}
    <input type="hidden" name="token" value="{{$token}}">
    

    【讨论】:

      猜你喜欢
      • 2017-04-21
      • 2018-09-30
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 2019-09-16
      相关资源
      最近更新 更多