Magento 2: Beschränken Sie die Kundenregistrierung durch eine bestimmte E-Mail-Erweiterung

7

Weiß jemand, wie man die Kundenregistrierung mit einer bestimmten E-Mail-Erweiterung blockiert? Ich erhalte so viele automatisierte Benutzerregistrierungen mit ... @ 163.com und ... @ mail.ru, wie kann ich diese Art von E-Mail-Registrierungen blockieren?

Riyas Muhammed
quelle

Antworten:

10

In Ihrem Fall können wir es mit dem Plugin versuchen . Der Magento\Customer\Controller\Account\CreatePostController führt die Kundenregistrierungsanforderung aus. Wir können also die Logik mit dieser Klasse erstellen.

app / code / Firma / Modul / etc / frontend / di.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

    <type name="Magento\Customer\Controller\Account\CreatePost">
        <plugin name="restrictCustomerEmail"
                type="Company\Module\Model\Plugin\Controller\Account\RestrictCustomerEmail"/>
    </type>
</config>

App / Code / Firma / Modul / Modell / Plugin / Controller / Konto / RestrictCustomerEmail.php

<?php

namespace Company\Module\Model\Plugin\Controller\Account;

use Magento\Framework\Controller\Result\RedirectFactory;
use Magento\Framework\UrlFactory;
use Magento\Framework\Message\ManagerInterface;

class RestrictCustomerEmail
{

    /** @var \Magento\Framework\UrlInterface */
    protected $urlModel;

    /**
     * @var \Magento\Framework\Controller\Result\RedirectFactory
     */
    protected $resultRedirectFactory;

    /**
     * @var \Magento\Framework\Message\ManagerInterface
     */
    protected $messageManager;

    /**
     * RestrictCustomerEmail constructor.
     * @param UrlFactory $urlFactory
     * @param RedirectFactory $redirectFactory
     * @param ManagerInterface $messageManager
     */
    public function __construct(
        UrlFactory $urlFactory,
        RedirectFactory $redirectFactory,
        ManagerInterface $messageManager

    )
    {
        $this->urlModel = $urlFactory->create();
        $this->resultRedirectFactory = $redirectFactory;
        $this->messageManager = $messageManager;
    }

    /**
     * @param \Magento\Customer\Controller\Account\CreatePost $subject
     * @param \Closure $proceed
     * @return mixed
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    public function aroundExecute(
        \Magento\Customer\Controller\Account\CreatePost $subject,
        \Closure $proceed
    )
    {
        /** @var \Magento\Framework\App\RequestInterface $request */
        $email = $subject->getRequest()->getParam('email');
        list($nick, $domain) = explode('@', $email, 2);
        if (in_array($domain, ['163.com', 'mail.ru'], true)) {

            $this->messageManager->addErrorMessage(
                'Registration is disabled for you domain'
            );
            $defaultUrl = $this->urlModel->getUrl('*/*/create', ['_secure' => true]);
            /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
            $resultRedirect = $this->resultRedirectFactory->create();

            return $resultRedirect->setUrl($defaultUrl);

        }
        return $proceed();
    }
}

HINWEIS: Auf diese Weise kann verhindert werden, dass sich Kunden über die Startseite registrieren. Es ist besser, wenn wir dies überprüfen, bevor wir die Kundenentität speichern.

Khoa TruongDinh
quelle
7

Sie sollten eine Plugin-On- \Magento\Customer\Api\CustomerRepositoryInterface::saveMethode erstellen und die E-Mail-Adresse des Kunden überprüfen.

Zum Beispiel:

class Vendor\Module\Plugin\CustomerValidation 
{
     /**
     * Before customer save.
     *
     * @param CustomerRepositoryInterface $customerRepository
     * @param CustomerInterface $customer
     * @param null $passwordHash
     * @return array
     *

     */
    public function beforeSave(
        CustomerRepositoryInterface $customerRepository,
        CustomerInterface $customer,
        $passwordHash = null
    ) {
       list($nick, $domain) = explode('@', $customer->getEmail(), 2);

       if (in_array($domain, ['163.com', 'mail.ru'], true)) {
           throw new \Magento\Framework\Exception\LocalizedException(
                __(
                    'Registration is disabled for you domain'
                )
            );       
        }

        return [$customer, $passwordHash];
    }
}
KAndy
quelle