尝试在 Laravel 中重置密码时,此密码重置令牌无效

sye*_*234 8 passwords reset laravel

我的密码重置遇到问题,并且收到此密码重置令牌无效的错误,我无法解决此问题:

我的控制器:

class ResetPasswordController extends Controller
{
    use ResetsPasswords;
}
Run Code Online (Sandbox Code Playgroud)

我的路线:

\Illuminate\Support\Facades\Auth::routes();

Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm');
Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.request');
Run Code Online (Sandbox Code Playgroud)

我的观点:

<form class="form-horizontal" method="POST" action="{{ route('password.request') }}">
    {{ csrf_field() }}
    <input type="hidden" name="token" value="{{ $token }}">
    <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
        <label for="email" class="col-md-4 control-label">E-Mail Address</label>
        <div class="col-md-6">
            <input id="email" type="email" class="form-control" name="email" value="{{ $email or old('email') }}" required autofocus>
            @if ($errors->has('email'))
                <span class="help-block">
                    <strong>{{ $errors->first('email') }}</strong>
                </span>
            @endif
        </div>
    </div>
    <div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">
        <label for="password" class="col-md-4 control-label">Password</label>
        <div class="col-md-6">
            <input id="password" type="password" class="form-control" name="password" required>
            @if ($errors->has('password'))
                <span class="help-block">
                    <strong>{{ $errors->first('password') }}</strong>
                </span>
            @endif
        </div>
    </div>
    <div class="form-group{{ $errors->has('password_confirmation') ? ' has-error' : '' }}">
        <label for="password-confirm" class="col-md-4 control-label">Confirm Password</label>
        <div class="col-md-6">
            <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required>
            @if ($errors->has('password_confirmation'))
                <span class="help-block">
                    <strong>{{ $errors->first('password_confirmation') }}</strong>
                </span>
            @endif
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-6 col-md-offset-4">
            <button type="submit" class="btn btn-primary">
                Reset Password
            </button>
        </div>
    </div>
</form>
Run Code Online (Sandbox Code Playgroud)

我还添加了我的错误的屏幕截图,请也查看一下,解决方案将受到高度赞赏!

重置令牌无效

小智 6

我已经用 Laravel 7.x 解决了这个问题。我认为 Laravel 6.x 也是一样!

  1. 我创建一个变量$token = Str::random(64);
  2. 接下来,我在表中创建一条记录password_resets,其令牌值为:(bcrypt($token)
    bcrypt()在您种子数据库时创建密码的函数)
  3. 最后,您发送到电子邮件的链接是 origin $token


emo*_*ity 5

由于您的令牌不正确,因此它应该是长度为 64 个字符的字符串,如下所示:

a8935edacb0711a304395c1f58979b545b4a636387053de6012e73048e5a60d2
Run Code Online (Sandbox Code Playgroud)

password_resets数据库的表中,它应该被加密并且看起来像这样:

$2y$10$YOdbMZk2N7xLsfXZIuMIv.ZayZQCB21L.GXVPdtt/WMOO1hJL7enO
Run Code Online (Sandbox Code Playgroud)

将您的更改MAIL_DRIVER=log,截断password_resets表(如果在本地),然后进行另一次密码重置,然后检查日志以读取电子邮件并查看密码重置令牌是什么。复制该网址并将其粘贴到您的浏览器中,看看您是否仍然收到该错误,然后我们从那里获取它。:)