Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php laravel auth将bcrypt应用于用户名/电子邮件_Php_Laravel_Authentication - Fatal编程技术网

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

Php laravel auth将bcrypt应用于用户名/电子邮件,php,laravel,authentication,Php,Laravel,Authentication,laravel身份验证系统使用bcrypt保存密码。是否可以对用户名(即电子邮件)执行相同的操作?我希望避免将任何客户电子邮件地址以纯文本形式保存在数据库中 编辑: 我不需要知道用户电子邮件的任何其他功能。我只希望用户能够登录他们的电子邮件地址。我只是想知道是否有一种简单的方法可以使用集成的laravel auth系统来实现这一点,或者我是否需要自己编写整个auth逻辑根据散列密码对用户进行身份验证的一般流程是: 用户提交用户名和密码 根据用户名从数据库中提取一个用户实体 使用Password\

laravel身份验证系统使用bcrypt保存密码。是否可以对用户名(即电子邮件)执行相同的操作?我希望避免将任何客户电子邮件地址以纯文本形式保存在数据库中

编辑:


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

根据散列密码对用户进行身份验证的一般流程是:

  • 用户提交用户名和密码
  • 根据用户名从数据库中提取一个用户实体
  • 使用
    Password\u verify
  • 用户已通过身份验证(或未通过身份验证)
  • 这依赖于以纯文本形式存储的用户名,否则无法执行第二步。如果还要对用户名进行散列,则该过程需要变成:

  • 用户提交用户名和密码
  • 从数据库中提取每个用户
  • 使用
    password\u verify检查用户名和密码
  • 用户已通过身份验证(或未通过身份验证)
  • 这在理论上是一种可行的方法,但它根本不可扩展。第2步要求要么将所有用户提取到内存中,要么对它们进行分页,这两者都会增加大量开销。验证散列数据也是一项(按设计)昂贵的操作,如果您必须为数据库中的每个用户执行两次,那么每次有人登录时,您都会很快遇到麻烦

    我认为您可能缺少的一点是,
    password\u hash
    每次都会生成不同的hash,即使是对于相同的输入字符串。这就是第二种方法不可行的原因,因为它阻止查找单个用户


    此外,正如在评论中提到的,使用bcrypt散列的任何内容都将保持散列状态。您可能不需要实际向用户发送电子邮件,但您也将失去在网站上显示其用户名的能力,无论是在用户配置文件页面中还是在任何内容旁边等。

    在电子邮件上应用bcrypt后,您将无法对其进行解密。只能将哈希值与另一个哈希值进行比较。只要您确定不知道电子邮件是什么,就可以确定。按用户名搜索也是不可能的,因为您将无法有效地索引该列。嗯,不是不可能,但是非常昂贵。我不需要知道用户电子邮件的其他功能。我只希望用户能够登录他们的电子邮件地址。我只是想知道,是否有一种简单的方法可以使用集成的laravel auth系统来实现这一点,或者如果我需要自己编写整个auth逻辑,您可以使用RSA等算法实现加密,以便以后可以根据需要解密值。我猜这是由于brcypt。。?使用一种盐的方法如何?这种盐不是每个用户所独有的。然后我可以在之前对它进行散列,然后查询数据库以在理论上找到匹配项,当然。但bcrypt被接受为行业标准的原因在于其设计和安全性。当你开始剥离其中的一部分时,对用户名进行哈希运算的意义就越小。如果你不需要用户名来做其他事情(发送电子邮件/在邮件头中显示等),那么它们可能只是第二个密码——在这种情况下,首先需要更长的密码,而不需要用户名。好吧,还有一个奇怪的想法。如果我在用户名/电子邮件上使用bcrypt并将密码存储为纯文本会怎么样。