0

Laravel 要求用户表中的密码字段至少有 60 个字符。

我们的旧模式有 32 个字符,并且 prod 中的所有现有密码在加密后都是 32 个字符或更少。

将 DB 字段迁移到 60 个字符后,如果我们切换到 laravel,则无法验证旧密码。

我们绝对可以提示用户重置他们的密码,但我们必须能够首先对他们进行身份验证。这是一个问题。

我们如何处理这个?寻找一些想法。

4

1 回答 1

1

您的旧系统和 laravel 使用不同的散列方法。

如果您的旧系统有 32 个字符,则可能是 md5 散列。

要将您的旧用户转换为 laravel 的散列,您首先必须使用他们的旧密码登录用户。登录时,您必须使用旧的散列系统(md5 或其他任何东西,以及盐,如果有的话)。用户使用旧的哈希系统成功登录后,您要求他们重置密码。现在,当您重置他们的旧密码时,请使用 Larvel 的哈希系统Hash::make()

您可以按照以下步骤操作:

  1. 改变你的数据库结构。将您的password列重命名为old_password.
  2. 在登录过程中,检查old_password用户的列是否为空。如果它不为空,那么您必须使用旧的哈希方法来验证用户。使用该old_password列作为用户的密码。
  3. 一旦该用户使用旧密码登录并且登录成功,您可以为密码创建新的哈希并将其存储在password列中。然后删除old_password列中的值。这样,您将在用户没有意识到的情况下为用户生成一个新的正确哈希(无需他手动重置密码)。
  4. 一旦您认为所有用户都重置了密码,您就可以old_password从数据库表中删除该列。

另一种方法是为所有用户生成随机密码。当他们尝试登录时,填写失败,然后他们可以使用他们的电子邮件地址重置密码。

于 2013-10-13T06:44:04.447 回答