好的,这是初学者,但我想解释一下。在下面的“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);
});
谢谢,
答案 0 :(得分:2)
您不需要_token
来重置或迁移密码。但是如果你用post方法向laravel发送任何输入,则绝对需要它。
Laravel可以轻松保护您的应用程序免受跨站点请求伪造(CSRF)攻击。跨站点请求伪造是一种恶意攻击,即代表经过身份验证的用户执行未经授权的命令。
如何在表单中包含csrf令牌?
您可以在表单中包含csrf令牌
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
提示:
您可以在
中的CSRF令牌过滤器之后处理该操作app\Http\Middleware\VerifyCsrfToken.php
希望这会对你有所帮助。
答案 1 :(得分:1)
在我的案例中,在与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}}">