如何在 Laravel Auth::attempt 中使用条件参数?

2024-01-01

使用 Laravel 4.1.30 我得到了以下代码,该代码通过身份验证测试登录尝试。

//... more codes here ...

$auth = Auth::attempt(array(
    'email'     => Input::get('email'),
    'password'  => Input::get('password'),
    'active'    => 1
), $remember);

if ($auth) {
    //... more codes here ...
}

我喜欢实现一个条件值,例如:

->active > 0

我使用活动(字段)作为用户登录的身份验证级别。任何高于 0(零)的值都应满足下一个条件。

怎么能在一份声明中完成呢?


tl;dr

您不能在传递给的数组中执行此操作Auth::attempt(),因为在框架中硬编码为在生成的查询中使用相等比较。

全面审查

框架实施

The attempt()函数实现于Illuminate/Auth/Guard.php.

public function attempt(array $credentials = array(), $remember = false, $login = true)
{
    $this->fireAttemptEvent($credentials, $remember, $login);

    $this->lastAttempted = $user = $this->provider->retrieveByCredentials($credentials);

    // If an implementation of UserInterface was returned, we'll ask the provider
    // to validate the user against the given credentials, and if they are in
    // fact valid we'll log the users into the application and return true.
    if ($this->hasValidCredentials($user, $credentials))
    {
        if ($login) $this->login($user, $remember);

        return true;
    }

    return false;
}

在这里你可以看到一个呼吁$this->provider->retrieveByCredentials($credentials);. The retrieveByCredentials()函数实现于Illuminate/Auth/DatabaseUserProvider.php.

public function retrieveByCredentials(array $credentials)
{
    // First we will add each credential element to the query as a where clause.
    // Then we can execute the query and, if we found a user, return it in a
    // generic "user" object that will be utilized by the Guard instances.
    $query = $this->conn->table($this->table);

    foreach ($credentials as $key => $value)
    {
        if ( ! str_contains($key, 'password'))
        {
            $query->where($key, $value);
        }
    }

    // Now we are ready to execute the query to see if we have an user matching
    // the given credentials. If not, we will just return nulls and indicate
    // that there are no matching users for these given credential arrays.
    $user = $query->first();

    if ( ! is_null($user))
    {
        return new GenericUser((array) $user);
    }
}

在这里你可以看到你传递给的数组Auth::attempt()被处理在foreach并且每个键值对都被添加为WHERE查询的子句。因为它是用一个$query->where($key, $value);调用时,仅限于相等比较。

可能的解决方案

解决方法是将这一行更改为:

$query->where($key, $value['operator'], $value['value']);

然后你可以重构给出的数组Auth::attempt().

$auth = Auth::attempt(array(
    'email' => array(
        'value'    => Input::get('email'),
        'operator' => '='
    ),
    'password' => array(
        'value'    => Input::get('password'),
        'operator' => '='
    ),
    'active' => array(
        'value'    => 0,
        'operator' => '>'
    )
), $remember);

这样做的问题是您必须重写使用该数组的所有其他函数,因此您最终会得到一个自定义解决方案。通过这种努力,您可以编写自己的身份验证查询或检查active after Auth::attempt().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Laravel Auth::attempt 中使用条件参数? 的相关文章

  • $mysqli->fetch_object($result) 不起作用

    我正在学习mysqli 我正在尝试从表 tbllogin 中获取数据 DATABASE CONNECTION hostname p localhost database dbLogin username user1 password pwd
  • Laravel 5 中的注册服务在哪里?

    我在用户表中添加了几个字段 在我读到的所有地方都说我还需要更新中的新字段app Services Registrar php文件 但我找不到Services文件夹在任何地方 这是 Laravel 5 中的新安装 这是我的目录结构的屏幕截图
  • 如何仅提取 mysql 和 php 中具有非零值的列?

    我正在尝试从 mysql 数据库中提取并显示在网页上 仅非零列 哪一列的日期是 0000 00 00 我不想在网页上显示这些列 下面分别是HTML代码和php脚本
  • Tomcat 8 上的 PHP

    我找到了很多如何让 PHP 在 Tomcat 上运行的指南 但都是以前的版本 我尝试了所有这些 但我所能显示的只是一个空白页面 并且代码仍然没有被触发 我知道 Tomcat 是为 Java 应用程序而不是 PHP 构建的 但我需要找到一种使
  • PHP数组删除重复的键值并仅显示一个

    Array 0 gt Array user id gt 78 post id gt 3 post user added id gt 2 1 gt Array user id gt 76 post id gt 8 post user adde
  • CodeIgniter:将参数从视图传递到控制器?

    编辑 现在使用下面的代码 我不确定如何正确打印书签和标签 我对 CI 完全陌生 最近遇到了障碍 我非常不确定如何将函数参数从视图文件传递到控制器 以便我可以在函数上使用它 我在视图上有一个 foreach 循环 遍历函数 get lates
  • isSaleable() 和 isAvailable() 有什么区别?

    我正在我的 Magento 主题的 单个 产品页面上显示库存可用性 但有些事情我并不完全理解 我看到模板中使用了两种方法来检查产品是否可供销售 Mage Catalog Model Product isAvailable Mage Cata
  • 如何制作自己的 while 循环,就像 WordPress 循环一样?

    我是新来的 也是 PHP 新手 只是想知道如何制作我自己的灵活循环 就像在 WordPress 中一样 注意我不是在谈论 wordpress 我想在我自己的 PHP 应用程序上实现它 我们回顾一下WP 有一段代码是这样的 while hav
  • 内存泄漏?!在“array_map”中使用“create_function”时,垃圾收集器是否正确?

    我在 StackOverflow 上找到了以下解决方案 从对象数组中获取特定对象属性的数组 PHP 从对象数组中提取属性 https stackoverflow com questions 1118994 php extracting a
  • 严格标准:在 wordpress/wp-includes/class-oembed.php 第 116 行中,仅应通过引用传递变量

    我已经查看了很多类似的问题 但关于我的代码 我没有得到它 错误 Strict Standards Only variables should be passed by reference in wordpress wp includes c
  • 是否可以使用 php 中的 C++ 二进制文件

    是否可以编写一些 C 或 C 代码并编译为二进制文件 然后将这些二进制文件与 php 一起使用 是否也可以使用 C 和 C 编写 php 库 如果是这样 请告诉我该怎么做 PHP 在设计上是模块化的 它由 引擎 和许多扩展组成 其中一些是必
  • PHP:测试三个变量是否相等

    我以前从未遇到过这种情况 但是如何测试三个变量是否相同 以下内容显然不起作用 但我想不出一种优雅 且正确 的方式来编写以下内容 if select above average select average select below aver
  • Google 站点地图日期格式

    我需要 php 中站点地图的日期格式 我怎样才能做到这一点 这个输出对吗
  • 在 php 中进行 AES 加密,然后用 Javascript (cryptojs) 解密

    我正在寻找一种对简单文本 5 到 6 个数字和 或字符 进行双向加密的方法 问题是我想在 php 中进行加密 然后通过 Javascript 解密 对于 php 我已经使用 mcrypt encode 进行了测试并使其正常工作 因此当我尝试
  • PHP 从表行中检索数据并将其存储到变量

    我想这些问题已经说明了一切 我的查询结果会生成与条件匹配的行 我想从每个表列中获取每个数据并将其放入一个变量中 getinfo select user firstname user middlename user lastname from
  • waitUntilObjectExists() Amazon S3 PHP SDK 方法,它到底是如何工作的?

    该函数是否会暂停 php 脚本 直到在 s3 服务器上找到该对象 我将它放在 foreach 循环中 一张一张地上传图像 找到对象后 我调用一个方法在本地删除图像 然后删除本地文件夹 如果为空 这是正确的处理方式吗 谢谢 foreach f
  • 计算网站上多个文件的下载次数的最佳方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 问题是 计算网站上多个文件的下载次数的最佳方法 我正在尝试做的事情 跟踪并统计多个文件的下载数量 对于具有不同扩展名的文件 foo z
  • WordPress 标头位置重定向

    WordPress 遇到问题 我想将页面重定向到文件夹 php adminpage php 内的特定 php 文件 SESSION变量等于 1 假设会话变量为 1 但浏览器返回 Not Found 有什么办法让它发挥作用吗 更新 已解决 使
  • AngularJS + Laravel 5 身份验证

    在使用 AngularJS 构建 SPA 时 我想在 AngularJS 网站中实现用户身份验证 但是 我不知道从哪里开始以及最佳实践是什么 基本上我有一个确定可以担任一个或多个角色 我寻找了一些例子 这样我就可以对如何正确处理这个问题有一
  • regex php - 查找 div 中具有特定 ID 的内容

    我确信这是一个简单的问题 尽管我在谷歌上进行了如此多的搜索和搜索 但我似乎无法弄清楚这有什么问题 我在此页面上的其他区域使用类似的表达式来准确返回我想要的内容 但是 我无法让这个特定的位返回我想要的东西 所以也许有人可以帮助我 我有一个带有

随机推荐

  • 如何强制在抽象类的所有子类中定义构造函数

    我有一个定义抽象方法的抽象类 A 这意味着 要使类可实例化 必须实现所有抽象方法 我希望我的所有子类都实现一个以 2 个整数作为参数的构造函数 声明构造函数违背了我的目的 因为我希望在子类中定义构造函数 并且我对实现一无所知 此外 我不能将
  • MRC命令的附加协处理器寄存器的作用是什么?

    引用自 ARMMRC文档 MRC 2
  • UIView 中的黑色背景?

    我按照在线教程在子类 UIView 中进行绘制 本教程显示了一个具有白色背景的 UIView 我通过简单地更改超级的背景颜色来修复此问题 问题是 当触摸结束时 背景不会保持清晰 我不知道 我只是尝试将填充颜色设置为 uicolorclear
  • 链式哈希表与开放寻址哈希表

    有人可以解释这两种实现之间的主要区别 优点 缺点 吗 对于图书馆 建议采用什么实施方式 维基百科关于哈希表的文章 http en wikipedia org wiki Hash table对人们使用的不同哈希表方案提供了明显更好的解释和概述
  • 我可以将 Subversion 用于多 GB 数据集吗?

    该数据集包含 6766 个文件夹中的 97984 个文件 大小为 2 57 GB 其中很多是二进制文件 对我来说 这听起来并不那么重要 大约 50 个文件的每日数据更改率为数百 KB 但我担心颠覆会变得极其缓慢 无论如何 它从来都不是很快
  • 尝试在 Google App Engine 项目中创建备份时出现 404

    Setup 我按照以下步骤后遇到了404问题不被接受问题的答案App Engine 数据存储区 以编程方式备份 https stackoverflow com questions 15811982 appengine datastore b
  • 艰苦学习 Python 练习 48 帮助

    我正在学习 Python The Hard Way 并在练习 48 中遇到了挑战 您将获得大量代码作为单元测试 并要求我们创建一个函数以使单元测试通过 我不确定这段代码到底应该是什么样子 我已粘贴其中一个函数作为参考 它们看起来都与这个相似
  • 指定条形图中条形之间的空格

    我正在尝试用 R 生成一个条形图 条形的宽度不同 条形之间的间距也不同 例如我有一个矩阵 data lt matrix c 1 2 2 4 7 1 11 12 3 ncol 3 byrow T colnames data lt c Star
  • MongoDB (Java) - 如何运行保存在 javascript 文件中的查询?

    所以我有很多 js 文件 我之前用它们从命令行界面查询 MongoDB 但现在我希望能够通过 Java 运行这些相同的查询 我使用 Java 来支持依赖于查询中的信息 我如何使用来自 Java 驱动程序的 JavaScript 查询并返回一
  • Python下间歇性“sslv3警报握手失败”

    我有一个用 Java 编写的 REST API 在 JBoss 下运行 最近我们将 JVM 从 1 6 更新到了 1 7 这开始导致仅我们正在连接的 Python 客户端出现问题 Python 客户端间歇性地出现握手失败 我们编写了一个非常
  • 如何禁用 Maven Javadoc 插件中的 Javadoc 警告?

    我正在使用 Maven Javadoc 插件 它输出警告如下 ERROR home monperrus spoon src main java spoon visitor CtVisitor java 144 warning no para
  • python httplib2 证书验证失败

    我已经尝试了一切我能找到的方法来让它发挥作用 我正在为基于 python 的任务程序 称为 GTG 开发一个插件 我在 Opensuse Linux 上运行 Gnome 代码 Python 2 7 def initialize self I
  • 类型“文档”缺少类型中的以下属性

    所以我有一个 Node w Typescript REST API 我有一个注册方法 它创建一个用户并使用创建的用户的名字 姓氏 电子邮件进行响应 问题是我遇到此打字稿错误 显示 类型 文档 缺少类型 SavedUser 中的以下属性 名字
  • 使用 jaxb 解析包含 xi:includes 的 xml 时遇到问题

    我正在使用 JAXB 来解析 xml 我有一个如下的架构 以及在此架构上定义的两个 xml 文件 a xml 和 b xml a xml 通过 xi include xml 标签依赖于 b xml 请提交以下示例以获取更清晰的数据 I ha
  • 在 NSScrollView 中,垂直滑块始终指向视图的底部

    我正在开发 Mac 应用程序 在此应用程序中 我使用 NSScrollView 的实例作为滚动视图 我设置了一个 customView 它是此 ScrollView 中 NSView 的实例 如下所示 scrollView setDocum
  • Get-SPWeb 无法找到具有 ID 或 URL 的对象

    问题 我似乎无法弄清楚为什么会出现下面的错误 即使 SharePoint 网站以及被调用的文档库存在 文档库Lib1有文档 文件夹 文档库Lib2是空的 有人知道出了什么问题吗 ERROR Get SPWeb Cannot find an
  • 如何使用 VBScript 关闭特定文件夹?

    我正在尝试使用 VBScript 制作一个简单的程序 每次打开特定文件夹时都会关闭该文件夹 从而拒绝对该文件夹的访问 我已经成功地在许多文件夹中使用了此代码 但由于某种原因它不适用于C ProgramData Microsoft Windo
  • 尚未注册类型“Microsoft.AspNetCore.Hosting.IHostingEnvironment”的服务

    当我想开火时我遇到了问题add migrationASP MVC Core 2 项目的命令 尚未注册类型 Microsoft AspNetCore Hosting IHostingEnvironment 的服务 这是我的启动 cs publ
  • 如何用BeautifulSoup找到评论标签

    我尝试了 soup find 但它似乎不起作用 提前致谢 编辑 感谢您提供有关如何查找所有评论的提示 我有一个后续问题 具体如何搜索评论 例如 我有以下评论标签 我真的只想要这个东西 i Wednesday 110518 i 110518
  • 如何在 Laravel Auth::attempt 中使用条件参数?

    使用 Laravel 4 1 30 我得到了以下代码 该代码通过身份验证测试登录尝试 more codes here auth Auth attempt array email gt Input get email password gt