laravel auth将bcrypt应用于用户名/电子邮件

时间:2017-09-05 16:57:18

标签: php laravel authentication

laravel auth系统使用bcrypt来保存密码。用户名(即电子邮件)是否可以这样做?我想避免任何客户电子邮件地址都在DB中保存纯文本。

编辑:

我不需要知道用户电子邮件的任何其他功能。我只希望用户能够使用他们的电子邮件地址登录。我只是想知道是否有一种简单的方法可以使用集成的laravel auth系统或者如果我需要自己编写整个auth逻辑

1 个答案:

答案 0 :(得分:1)

根据哈希密码验证用户的一般流程是:

  1. 用户提交用户名和密码
  2. 根据用户名
  3. 从数据库中提取一个用户实体
  4. 使用password_verify
  5. 检查密码
  6. 用户已通过身份验证(或未经过身份验证)
  7. 这取决于以纯文本格式存储的用户名,否则无法执行第二步。如果您也要对用户名进行哈希处理,则该过程需要变为:

    1. 用户提交用户名和密码
    2. 从数据库中提取每个用户
    3. 使用password_verify
    4. 检查用户名和密码
    5. 用户已通过身份验证(或未经过身份验证)
    6. 理论上这是一种可行的方法,但它根本不具备可扩展性。步骤2要求将所有用户提取到内存中,或者通过它们进行分页,这两者都会增加显着的开销。验证散列数据(按设计)也是一项昂贵的操作,如果你必须为数据库中的每个用户执行两次,每次任何人登录时,你'我很快就会遇到麻烦。

      我认为您可能缺少的一件事是password_hash每次都会生成不同的哈希值,即使对于相同的输入字符串也是如此。这使得第二种方法无法工作,因为它可以防止查找单个用户。

      此外,正如评论中所提到的,使用bcrypt进行任何散列都将保持不变。您可能不需要实际向用户发送电子邮件,但您也将无法在网站上显示其用户名,无论是在用户个人资料页面中还是在任何内容/等旁边。