Laravel旧方法不返回密码值

时间:2019-04-23 14:27:55

标签: php laravel laravel-5.7

我目前正在学习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 docs中使用了old方法,但是它没有说明密码。

2 个答案:

答案 0 :(得分:5)

Laravel故意阻止passwordpassword_confirmation。通常,最好不要将密码返回给用户。它是在异常处理程序中完成的。

如果您确实要包含它,请更新app/Exceptions/Handler.php文件以从password数组中删除password_confirmationdontFlash

答案 1 :(得分:2)

是的,这是正确的。它与安全性有关。 密码是一种特殊的字段类型,因此,它既不应显示该值,也不应使用旧值填充该字段。实际上,出于安全原因,我强烈建议您不要覆盖此默认行为。

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