使用 Cakephp 3 用户名或电子邮件登录

2024-01-01

我想使用用户名或电子邮件登录。所以我想动态更改 Auth 字段。

如何像 Cakehp 2 那样修改 $this->Auth 字段?

在 cakephp 2 中你可以这样做:

$this->Auth->authenticate = array(
    'Form' => array(
        'fields' => array('username' => 'email', 'password' => 'password'),
    ),
);

我尝试像这样更改身份验证,但它不起作用:

$this->Auth->config('authenticate', [
    'Form' => [
        'fields' => ['username' => 'email', 'password' => 'password']
    ]
]);

Thanks!


我找到了解决方案!

我假设用户名是字母数字(字母和数字)。

记得添加$this->Auth->constructAuthenticate();

应用程序控制器.php

use Cake\Controller\Controller;
use Cake\Event\Event;
use Cake\Core\Configure;

class AppController extends Controller
{
    public function initialize()
    {
        parent::initialize();
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'loginRedirect' => [
                'controller' => 'Users',
                'action'     => 'index'
            ],
            'logoutRedirect' => [
                'controller' => 'Users',
                'action'     => 'login'
            ]
        ]);
    }
}

用户控制器.php

use App\Controller\AppController;
use Cake\Validation\Validation;

class UsersController extends AppController
{
    public function login()
    {
        if ($this->request->is('post')) {

            if (Validation::email($this->request->data['username'])) {
                $this->Auth->config('authenticate', [
                    'Form' => [
                        'fields' => ['username' => 'email']
                    ]
                ]);
                $this->Auth->constructAuthenticate();
                $this->request->data['email'] = $this->request->data['username'];
                unset($this->request->data['username']);
            }

            $user = $this->Auth->identify();

            if ($user) {
                $this->Auth->setUser($user);
                return $this->redirect($this->Auth->redirectUrl());
            }

            $this->Flash->error(__('Invalid username or password, try again'));
        }
    }
}

登录.ctp

<div class="form">
<?= $this->Flash->render('auth') ?>
<?= $this->Form->create() ?>
    <fieldset>
        <legend><?= __('Please enter your username and password') ?></legend>
        <?= $this->Form->input('username') ?>
        <?= $this->Form->input('password') ?>
    </fieldset>
<?= $this->Form->button(__('Login')); ?>
<?= $this->Form->end() ?>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Cakephp 3 用户名或电子邮件登录 的相关文章

随机推荐

  • R 中嵌套随机效应模型的模型预测?

    我正在尝试拟合具有随机效应的混合模型 lmer基于数据集 df 的模型这个例子在这里 https stackoverflow com a 76510072 7258020 但是 我遇到了一个错误 指出 times 参数无效 有关如何修复它的
  • 强制打开“另存为...”弹出窗口,在文本链接中打开,单击查看 HTML 格式的 PDF

    我的网站上有一些大尺寸的 PDF 目录 我需要将它们链接为下载 当我用谷歌搜索时 我发现了下面提到的这样的事情 它应该打开 另存为 点击链接时弹出 但它不起作用 当我链接到如下文件时 它只是链接到文件并尝试打开该文件 a href file
  • Java中解析固定宽度文本日志的策略

    我试图找出如何最好地解析以下日志文 件 分割由水平线分隔的每个部分并提取各种数据 例如 COMPANY123 BIMMU 日期 2 18 等 然后创建一个字符串 其中包含由水平线分隔的部分中包含的所有其他数据 即 我想创建一个 语句 对象数
  • 如何关闭冻结的 SSH 会话?

    有时 由于互联网连接不良 与远程服务器的 SSH 会话会无限期冻结 是否可以在不关闭终端的情况下关闭会话 按以下三个键 Enter 波形符 时期 这是 断开连接 功能 如ESCAPE CHARACTERS的部分ssh man page
  • 快速聚焦文本字段

    我在注册屏幕上有 4 个文本字段 我将其设置为当用户在每个文本字段上按 下一步 时 下一个文本字段将获得焦点 代码如下 func textFieldShouldReturn textField UITextField gt Bool if
  • Enterprise Architect 项目编程语言

    在Enterprise Architect中 当我对类进行建模并指定该类的实现语言 然后在用例中使用该类的实例时 用例中实例的实现语言不是该类的实现语言 而是默认值 有没有办法让Enterprise Architect使用该类设定的实现语言
  • 输出具有多个工作表的单个 Excel 文件

    Talend Open Studio for Data Integration 中是否有一个组件能够输出单个 Excel 文件 但其中包含 2 个单独的工作表 我想将原始文件中的一些列分隔到另一个工作表中 并将另一组列分隔到第二个工作表中
  • 使用 ksoap2-android 订阅共享点 Web 服务时出现身份验证错误

    我正在编写一个Android应用程序 它将使用sharepoint 2010中lists amx服务的getlist 方法 我正在使用kso ap2 android来处理我的soap消息 当我尝试进行身份验证时 出现预期的 xmlpullp
  • AlarmManager 阻塞主线程

    我已经实现了一个调用服务的 AlarmManager 问题是 虽然我在 AsyncTask 中启动它 但它阻塞了主线程 这是我的 AsyncTask 的来源 private class NotificationsServiceTask ex
  • 按最大大小将 numpy 数组拆分为块

    我有一些very大型二维 numpy 数组 一个数据集有 55732 x 257659 个元素 超过 140 亿个元素 因为有些操作我需要执行 throwMemoryErrors 我想尝试将数组分割成一定大小的块 然后针对这些块运行它们 我
  • 我们可以在 Android 中通过用户的电话号码找到用户吗?

    Android 中是否可以通过用户的电话号码找到用户 如果可以向用户发送短信 那么我们还可以检索或了解发送短信的用户的位置 我的意思是是否可以对以下功能进行编程 应用程序发送短信到用户的手机 应用程序在用户的手机上接收来自短信发送者的短信
  • C++ 中的字符指针

    我对 C 中的字符指针有疑问 每当我们在 C 中创建字符指针时 char p How are you doing p 应该包含保存值 how are you getting 的内存位置的地址 但是 我对示例代码和输出感到困惑 为什么cout
  • 在Unity3d中使用Android陀螺仪,如何将初始相机旋转设置为初始移动设备旋转?

    我想使用Android陀螺仪在Unity3d的标准第一人称控制器上执行头部跟踪 我创建了一个简短的脚本 用于旋转第一人称控制器的父节点和相机子节点 该脚本附在相机上 这个脚本运行得很好 它根据我的移动设备的移动旋转第一人称视图 但是 只有当
  • Django + docker + 周期性命令

    使用 docker docker compose 运行 Django 时 运行定期 计划任务 如 manage py custom command 的最佳实践是什么 FE最常见的情况 manage py 清除会话 https docs dj
  • 在 Laravel Eloquent 中使用“With()”函数获取特定列

    我有两张桌子 User and Post One User可以有很多posts和一个post只属于一个user In my User型号 我有一个hasMany关系 public function post return this gt h
  • 大整数转十六进制

    快速提问 我有一个愚蠢的长BigInteger我想将其作为十六进制字符串写入文件 我知道Java提供了 toString 16 方法可以做到这一点 但我在 C 中找不到等效的方法 我在用着System Numerics BigInteger
  • 使用 XTS 进行 Rbind。如何堆叠而不按索引日期排序

    我正在使用 Quantmod 来生成带有股票信息的 XTS 对象 并且我希望编译 堆叠一堆 XTS 文档来处理代码 将 Rbind 与 XTS 结合使用 我发现它不会将 XTS 堆叠在一起 而是按日期进行合并和排序 x lt xts 1 1
  • 确定表单上是否存在字段

    我有一个从数据库动态创建的表单字段 一系列复选框 因此表单上可能不存在该字段 如果数据库中没有匹配的值 我有一些代码需要根据字段是否存在来执行 并提取所选值 如果存在 不过 我似乎无法让 javascript 承认该字段的存在 这是我尝试过
  • 当应用程序处于打瞌睡模式时,警报管理器触发的 Android 通知不会触发

    我有以下要求 用户需要能够在我的应用程序中安排定期提醒 以便在某个时间触发推送通知exact每天的时间 这是我希望我最终不会提交的问题之一 因为在撰写本文时推荐了类似的问题 然而 一些团队成员花了很多时间浏览 Android 开发人员文档和
  • 使用 Cakephp 3 用户名或电子邮件登录

    我想使用用户名或电子邮件登录 所以我想动态更改 Auth 字段 如何像 Cakehp 2 那样修改 this gt Auth 字段 在 cakephp 2 中你可以这样做 this gt Auth gt authenticate array