当前位置: 首页 > 知识库问答 >
问题:

蛋糕Php身份验证电子邮件或用户名登录

司寇祺
2023-03-14

我目前已经设置了下面的Auth组件,它工作得很好,但是我的客户现在希望能够为用户提供使用用户名或电子邮件地址登录的选项。

我当前的设置:

AuthComponent::$sessionKey = 'Auth.Customer';

        $this->Auth->allow();

        $this->Auth->authenticate = array(
            'Form' => array(
                'userModel' => 'Customer',
                'fields' => array(
                    'username' => 'email',
                    'password' => 'password',
                ),
                'scope' => array(
                    'Customer.guest' => 0,
                ),
                'passwordHasher' => 'Blowfish',
            )
        );

        $this->Auth->loginAction = array(
            'controller' => 'customers',
            'action' => 'login',
            'admin' => false,
            'plugin' => false,
        );
        $this->Auth->loginRedirect = array(
            'controller' => 'customers',
            'action' => 'my_account',
            'admin' => false,
            'plugin' => false,
        );

        if($this->Auth->user('id') == false){
            $this->Auth->authError = 'Please login to continue';
        }

        $this->Auth->authorize = array('Controller');

我如何才能更改此项,以便日志需要“电子邮件”或新字段“用户名”。

我会假设一个OR语句,但是下面的不工作:

$this->Auth->authenticate = array(
            'Form' => array(
                'userModel' => 'Customer',
                'fields' => array(

                    'password' => 'password',
                    'OR' => array(
                                'username' => 'email',
                                'username' => 'username'
                    )
                ),
                'scope' => array(
                    'Customer.guest' => 0,
                ),
                'passwordHasher' => 'Blowfish',
            )
        );

共有1个答案

钱志
2023-03-14

我已尝试更改配置,但无法执行此操作。我已自定义我的登录标识代码,如下所示:

 $findByEmail = $this->Users->findByEmail($this->request->data['username'])->first();
if (isset($findByEmail->username) && $findByEmail->username) {
  $this->request->data['username'] = $findByEmail->username;
 }
  $user = $this->Auth->identify(); 

无论用户名或电子邮件如何,这种方法都有效

 类似资料:
  • 如何使用firebase中的验证电子邮件验证使用电子邮件和密码登录的用户?这背后的逻辑是如何工作的,它在代码中会是什么样子? 解决方案/帮助:对于那些仍在寻找答案的人,我找到了这篇文章 堆栈溢出 帖子

  • 在本章中,我们将向您展示如何使用Firebase电子邮件/密码身份验证。 创建用户 要对用户进行身份验证,我们可以使用createUserWithEmailAndPassword(email, password)方法。 例子 (Example) 让我们考虑以下示例。 var email = "myemail@email.com"; var password = "mypassword"; fire

  • 我也不会得到一个错误,如果我登录我的电子邮件和密码没有验证电子邮件。 非常感谢你事先的帮助。

  • 我可以在用户注册后发送一封验证邮件,但是用户会自动登录。在用户验证其电子邮件之前,我如何阻止他们登录?

  • 问题内容: 我正在构建一个 Android 应用程序,在该应用程序中我使用不同的方式让用户注册自己,例如电子邮件/密码,电话,谷歌,Facebook,Twitter。我还希望用户能够将彼此添加为联系人。 如果仅使用电子邮件和Google,那么实施起来会很容易,因为我可以将用户的电子邮件存储在数据库中,并使用它来识别不同的用户并在他们之间建立关系。 但是现在的问题是,用户也可以使用他们的电话号码进行

  • 我正在提示我的应用程序用户提供电子邮件凭据。 在用户插入电子邮件并通过后,我想验证该帐户。 我正在使用javax。邮政有没有办法验证帐户?只确保凭据确实有效——否则我想显示一个无效用户并传递消息。 也许是某种表演方式: 并在不发送任何内容的情况下检查身份验证异常。