Laravel密码重置令牌

时间:2016-01-08 05:14:05

标签: laravel laravel-5

好的,这是初学者,但我想解释一下。在下面的“postReset”方法的内置Laravel密码重置中,它指定“令牌”...但是,当使用{!! csrf_field()!!}在视图中,它生成输入名称=“_ 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);
        });

谢谢,

2 个答案:

答案 0 :(得分:2)

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

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

Source

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

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

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

提示:

您可以在

中的CSRF令牌过滤器之后处理该操作
app\Http\Middleware\VerifyCsrfToken.php

希望这会对你有所帮助。

答案 1 :(得分:1)

在我的案例中,在与CSRF不相关之前,我遇到了同样的问题,因为我从代码中读取了他搜索第三部分以从URL中获取令牌的情况,并将其用于重置。 但是如果您使用本地化系统,则会在屏幕下方丢失它

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}}">