【问题标题】:Laravel old method not returning password valuesLaravel 旧方法不返回密码值
【发布时间】:2019-04-23 14:27:55
【问题描述】:

我目前正在学习 Laravel,并且正在创建一个注册表单。当表单出现错误时,我想用它们的旧值重新填充输入字段。

我的表单如下所示:

<form method="post" action="/users/store">
    @csrf
    <input type="text" name="username" value="{{ old('username') }}">
    <input type="email" name="email" value="{{ old('email') }}">
    <input type="password" name="password" value="{{ old('password') }}">
    <input type="password" name="password_confirmation" value="{{ old('password_confirmation') }}">
    <button class="btn btn-outline-warning" id="registerConfirm">Confirm</button>
</form>

为了便于阅读,我从输入文件中删除了所有标签、类和 ID。

看起来 Laravel 不“想要”用旧密码重新填充输入字段。我觉得这是真的原因是因为用户名和电子邮件确实有效,但两个密码字段都没有。 每当我将密码字段更改为文本字段将名称从密码更改为“asdasd”之类的名称时,它确实有效。

我的问题是:我的理论正确吗?如果正确,Laravel 为什么要这样做?它与安全有关吗?提前致谢!

我查看了the docsold 方法,但它没有说明密码。

【问题讨论】:

  • 会发生什么?您希望在那里看到明文密码吗?
  • 什么都没有发生,字段保持空白。我希望用密码重新填充这些字段。

标签: php laravel laravel-5.7


【解决方案1】:

Laravel 故意阻止 passwordpassword_confirmation。通常最好不要将密码返回给用户。它在其异常处理程序中执行此操作。

如果您真的想要包含它,请更新您的 app/Exceptions/Handler.php 文件以从 dontFlash 数组中删除 passwordpassword_confirmation

【讨论】:

  • 谢谢!这就是我要找的信息!我不知道这是一个不好的做法。不会将其从阵列中移除。 (等待 SO 允许我将此标记为答案...)
  • 没问题。我很高兴它有帮助
  • 如果可以根据具体情况提供,那就太好了。我刚刚遇到这个问题,通常不会将密码显示为是,这是有道理的,但同时为其他事情存储登录名和密码然后会受到这个问题的影响。现在我将重命名该字段,但重点是这种特殊情况要求表单存储和显示密码以供外部使用。还可以与团队交谈,了解他们是否需要将此信息存储在我正在制作的网站中,或者是否将其更好地存储在其他地方。
  • 是否可以在控制器中防止这种情况发生?如果在后端创建一个密码错误的用户(不匹配),你必须再次重新输入。在这种情况下,管理员不刷新密码会很方便 - 或者这也是不好的做法?
【解决方案2】:

是的,没错。它与安全相关。 password 是一种特殊的字段类型,因此,它既不应该显示该值,也不应该用旧值填充该字段。事实上,出于安全原因,我强烈建议不要覆盖此默认行为。

另一方面,您的浏览器可能会根据设置为您存储和预填充密码字段。

【讨论】:

  • 感谢您的回答,如果它与安全相关,我通常不会覆盖默认行为,因此也不会更改它。也就是说,将字段类型更改为 text 不会更改输出。就像 George Hanson 在他的回答中所说的那样,password 和 password_confirmation 被此功能“列入黑名单”。
猜你喜欢
  • 1970-01-01
  • 2021-07-20
  • 2023-03-09
  • 1970-01-01
  • 2016-03-02
  • 2017-12-23
  • 2018-06-14
  • 2017-04-04
  • 2014-08-19
相关资源
最近更新 更多