Laravel密码重置令牌

5

好的,这是非常基础的问题,但我想要一个解释。在Laravel内置的密码重置中,在下面的“postReset”方法中指定了“token”……然而,在视图中使用{!! csrf_field() !!}时,它会生成名为“_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);
        });

Thanks,


_token 仅用于防止跨站请求伪造攻击,而不是用于重置密码。但在重置密码时,您需要放置一个名称为 tokeninput,该 input 将用于重置密码。 - Basheer Kharoti
2个回答

4

我之前遇到了同样的问题,但与CSRF无关。从代码中可以看出他在搜索第三段以获取用于重置的令牌。

但如果您使用本地化系统,则会出现以下屏幕截图所示的问题:

enter image description here

您可以进行小的解决方法来解决这个问题。

@php
    $segments = \Request::segments();
    $token = end($segments);
@endphp

<form method="POST" action="{{ route('password.request') }}">
{!!  csrf_field() !!}
<input type="hidden" name="token" value="{{$token}}">

3
您重置密码或迁移时不需要使用_token。但是,如果您需要以post方法将任何输入发送到Laravel,则绝对需要使用它。
Laravel使得保护您的应用程序免受跨站点请求伪造(CSRF)攻击变得容易。跨站点请求伪造是一种恶意利用方式,可以代表已认证用户执行未经授权的命令。
您可以通过在表单中包含以下内容来包含csrf token:此处
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

提示:

您可以在CSRF令牌过滤器后处理操作。

app\Http\Middleware\VerifyCsrfToken.php

希望这能为您提供帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接