【问题标题】:Laravel 5.5 remove email field from password reset formLaravel 5.5 从密码重置表单中删除电子邮件字段
【发布时间】:2018-05-27 00:41:13
【问题描述】:

我需要从用户点击链接通过电子邮件发送的密码重置表单中删除电子邮件字段。我不希望用户在休息密码期间再次重新输入他们的电子邮件,因为他们已经验证了他们的电子邮件。这个问题已经被问过好几次了,但大多数问题还没有回答,其他问题也没有工作。我已经完成了这个讨论,但他们建议编辑核心文件,这是非常危险的。那么有人找到它的解决方案了吗?

【问题讨论】:

  • 如果您知道如何生成重置令牌,那么您可以向用户发送一个自定义 url,您可以从中传递两个变量,例如令牌和电子邮件 ID 或令牌和用户 ID。例如-website.com/password/customreset/{email}/{token}
  • 我认为这是作为一项安全功能完成的 - 令牌的哈希值类似于密码,并且需要一个标识符(电子邮件),以便应用程序知道将其与数据库中的哈希值进行比较.如果单击他们在电子邮件中获得的链接足以对您进行验证,则不需要对令牌进行哈希处理,您可能只需覆盖设置并检查令牌的函数,以便它们生成随机的未哈希令牌。永远不要编辑核心文件——如果你绝对需要,扩展和覆盖它们

标签: email laravel-5.4 laravel-5.5 change-password forgot-password


【解决方案1】:

这是您手动创建重置令牌的方式

$email="example@gmail.com";
$token=hash_hmac('sha256', Str::random(40), env("APP_KEY"));
DB::table('password_resets')->where('email', '=', $email)->delete();
DB::table('password_resets')->insert(
        ['email' => $email, 'token' => bcrypt($token)]
    );

现在$token是通过url发送的令牌,bcrypt($token)是保存在数据库中的加密令牌。

获得令牌后,您可以简单地使用http://website.com/password/newresetpage/{{$email}}/{{$token}}之类的网址向用户发送电子邮件

在与之前相同的新密码重置页面中,只需隐藏电子邮件字段并通过网址中的$email 设置字段。

<form class="form-horizontal" role="form" 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>


                                <input id="email" type="email" class="form-control" name="email" value="{{$email}}" required hidden="true">


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-22
    • 2017-11-12
    • 2018-06-29
    • 1970-01-01
    • 2018-07-25
    • 2016-03-01
    • 2016-08-07
    • 1970-01-01
    相关资源
    最近更新 更多