Magento 2 में ग्राहक पासवर्ड जल्दी कैसे बदलें


11

Magento 1 में व्यवस्थापकीय कॉन्फ़िगरेशन से प्रबंधित ग्राहक अनुभाग के तहत हम ग्राहक के नए पासवर्ड को आसानी से अपडेट / बदल सकते हैं।

Magento 2 में केवल ईमेल के साथ पासवर्ड रीसेट करने से मदद मिलेगी, लेकिन हमेशा नहीं। यह एक सरल प्रश्न हो सकता है, लेकिन कभी-कभी यह बहुत समय बचाएगा।

  • क्या Magento 2 में ग्राहक का पासवर्ड बदलने का कोई आसान तरीका है?

  • क्या डेटाबेस से कोई रास्ता है जहां हम सीधे एन्क्रिप्शन प्रकार के साथ पासवर्ड बदल सकते हैं?

मदद की सराहना की जाएगी।


व्यवस्थापक उपयोगकर्ता के लिए इसे बदलना चाहते हैं?
सुरेश चिकानी

इसके अलावा magento.stackexchange.com/questions/137555/… देखें । संभव डुप्लिकेट? केवल यही एक स्पष्ट रूप से ग्राहक पासवर्ड "डेटाबेस के माध्यम से" को बदलने के लिए कहता है ...
7ochem

जवाबों:


8

मौजूदा ग्राहक के लिए पासवर्ड बदलने का आसान तरीका, आप मौजूदा ग्राहक ईमेल आईडी और पासवर्ड फ़ील्ड के ग्राहक CSV फ़ाइल डेटा आयात कर सकते हैं। आप अपना पासवर्ड दे सकते हैं जिसे आप बदलना चाहते हैं और password_hash खाली होना चाहिए।

कृपया नीचे दिए गए sceens स्क्रीनशॉट देखें:

यहाँ छवि विवरण दर्ज करेंयहाँ छवि विवरण दर्ज करें


13

कंसोल कमांड बनाना मेरी राय में आपकी सबसे अच्छी शर्त होगी।

संपादित करें: यदि आवश्यक हो तो मॉड्यूल यहां उपलब्ध है: https://github.com/digitalpianism/changepassword

यहां एक मॉड्यूल है जो इसे करेगा (केवल 2.1.2 पर परीक्षण किया गया है):

app/code/DigitalPianism/ChangePassword/etc/module.xml :

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="DigitalPianism_ChangePassword" setup_version="0.0.1">
        <sequence>
            <module name="Magento_Customer"/>
        </sequence>
    </module>
</config>

app/code/DigitalPianism/ChangePassword/etc/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\Framework\Console\CommandListInterface">
        <arguments>
            <argument name="commands" xsi:type="array">
                <item name="change_password" xsi:type="object">DigitalPianism\ChangePassword\Console\Command\ChangePassword</item>
            </argument>
        </arguments>
    </type>
</config>

app/code/DigitalPianism/ChangePassword/registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'DigitalPianism_ChangePassword',
    __DIR__
);

app/code/DigitalPianism/ChangePassword/Console/Command/ChangePassword.php

<?php

namespace DigitalPianism\ChangePassword\Console\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputInterface;
use Magento\Customer\Model\CustomerRegistry;
use Magento\Customer\Model\Customer;
use Magento\Framework\Stdlib\StringUtils as StringHelper;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Magento\Framework\App\State as AppState;

/**
 * Class ChangePassword
 * @package DigitalPianism\ChangePassword\Console\Command
 */
class ChangePassword extends Command
{

    /**#@+
     * Data keys
     */
    const KEY_CUSTOMER_ID = 'customer-id';
    const KEY_CUSTOMER_PASSWORD = 'customer-password';

    /**
     * @var CustomerRegistry
     */
    private $_customerRegistry;

    /**
     * @var Customer
     */
    private $_customer;

    /**
     * @var StringHelper
     */
    private $_stringHelper;

    /**
     * @var ScopeConfigInterface
     */
    private $_scopeConfig;

    /**
     * @var AppState
     */
    private $_appState;

    /**
     * @param CustomerRegistry $customerRegistry
     * @param StringHelper $stringHelper
     * @param ScopeConfigInterface $scopeConfig
     * @param AppState $appState
     */
    public function __construct(
        CustomerRegistry $customerRegistry,
        StringHelper $stringHelper,
        ScopeConfigInterface $scopeConfig,
        AppState $appState
    ) {
        $this->_appState = $appState;
        $this->_scopeConfig = $scopeConfig;
        $this->_stringHelper = $stringHelper;
        $this->_customerRegistry = $customerRegistry;
        parent::__construct();
    }

    /**
     * Initialization of the command
     *
     * @return void
     */
    protected function configure()
    {
        $this->setName('customer:changepassword')
            ->setDescription('Change customer password')
            ->setDefinition($this->getOptionsList());
        parent::configure();
    }

    /**
     * Get list of arguments for the command
     *
     * @return InputOption[]
     */
    public function getOptionsList()
    {
        return [
            new InputOption(self::KEY_CUSTOMER_ID, null, InputOption::VALUE_REQUIRED, '(Required) Customer ID'),
            new InputOption(self::KEY_CUSTOMER_PASSWORD, null, InputOption::VALUE_REQUIRED, '(Required) Customer password')
        ];
    }

    /**
     * {@inheritdoc}
     */
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $this->_appState->setAreaCode('adminhtml');
        $errors = $this->validate($input);
        if ($errors) {
            $output->writeln('<error>' . implode('</error>' . PHP_EOL .  '<error>', $errors) . '</error>');
            // we must have an exit code higher than zero to indicate something was wrong
            return \Magento\Framework\Console\Cli::RETURN_FAILURE;
        }
        $this->_customer
            ->changePassword($input->getOption(self::KEY_CUSTOMER_PASSWORD))
            ->save();

        $output->writeln(
            '<info>Password for customer #' . $input->getOption(self::KEY_CUSTOMER_ID) . ' has been successfully changed</info>'
        );
    }

    /**
     * Check if all admin options are provided
     *
     * @param InputInterface $input
     * @return string[]
     */
    public function validate(InputInterface $input)
    {
        $errors = [];

        try {
            $this->checkPasswordStrength($input->getOption(self::KEY_CUSTOMER_PASSWORD));
            /** @var Customer $customer */
            $this->_customer = $this->_customerRegistry->retrieve($input->getOption(self::KEY_CUSTOMER_ID));
        } catch (Exception $e) {
            $errors[] = $e->getMessage();
        }

        return $errors;
    }

    /**
     * Make sure that password complies with minimum security requirements.
     *
     * @param string $password
     * @throws \Magento\Framework\Exception\InputException
     */
    protected function checkPasswordStrength($password)
    {
        $length = $this->_stringHelper->strlen($password);
        if ($length > \Magento\Customer\Model\AccountManagement::MAX_PASSWORD_LENGTH) {
            throw new \Magento\Framework\Exception\InputException(
                __(
                    'Please enter a password with at most %1 characters.',
                    \Magento\Customer\Model\AccountManagement::MAX_PASSWORD_LENGTH
                )
            );
        }
        $configMinPasswordLength = $this->getMinPasswordLength();
        if ($length < $configMinPasswordLength) {
            throw new \Magento\Framework\Exception\InputException(
                __(
                    'Please enter a password with at least %1 characters.',
                    $configMinPasswordLength
                )
            );
        }
        if ($this->_stringHelper->strlen(trim($password)) != $length) {
            throw new \Magento\Framework\Exception\InputException(__('The password can\'t begin or end with a space.'));
        }

        $requiredCharactersCheck = $this->makeRequiredCharactersCheck($password);
        if ($requiredCharactersCheck !== 0) {
            throw new \Magento\Framework\Exception\InputException(
                __(
                    'Minimum of different classes of characters in password is %1.' .
                    ' Classes of characters: Lower Case, Upper Case, Digits, Special Characters.',
                    $requiredCharactersCheck
                )
            );
        }
    }

    /**
     * Retrieve minimum password length
     *
     * @return int
     */
    protected function getMinPasswordLength()
    {
        return $this->_scopeConfig->getValue(\Magento\Customer\Model\AccountManagement::XML_PATH_MINIMUM_PASSWORD_LENGTH);
    }

    /**
     * Check password for presence of required character sets
     *
     * @param string $password
     * @return int
     */
    protected function makeRequiredCharactersCheck($password)
    {
        $counter = 0;
        $requiredNumber = $this->_scopeConfig->getValue(\Magento\Customer\Model\AccountManagement::XML_PATH_REQUIRED_CHARACTER_CLASSES_NUMBER);
        $return = 0;

        if (preg_match('/[0-9]+/', $password)) {
            $counter ++;
        }
        if (preg_match('/[A-Z]+/', $password)) {
            $counter ++;
        }
        if (preg_match('/[a-z]+/', $password)) {
            $counter ++;
        }
        if (preg_match('/[^a-zA-Z0-9]+/', $password)) {
            $counter ++;
        }

        if ($counter < $requiredNumber) {
            $return = $requiredNumber;
        }

        return $return;
    }
}

मॉड्यूल को सक्षम करने के लिए:

php bin/magento setup:upgrade
php bin/magento module:enable DigitalPianism_ChangePassword

इसके प्रयेाग के लिए:

php bin/magento customer:changepassword --customer-id=3 --customer-password=mynewpassword

कहाँ पे:

  • 3 ग्राहक आईडी का एक उदाहरण है
  • mynewpassword नए ग्राहक पासवर्ड का एक उदाहरण है

@ राफेल, सरल और सीधे उदाहरण के लिए धन्यवाद .. उम्मीद के मुताबिक काम करना।
कृष्णा इज्जादा

1
यह एक n98-magerun2.phar में होना चाहिए ! ;)
7ochem

मुझे cmd चलाते समय एरिया कोड सेट नहीं हो रहा है। कृपया मदद कीजिए।
कोवसीगं अत्श्याम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.