কীভাবে গ্রাহকের পাসওয়ার্ড দ্রুত পরিবর্তন করবেন মেজেন্টো 2 এ


11

ম্যানেজ গ্রাহক বিভাগের অধীনে অ্যাডমিন কনফিগারেশন থেকে ম্যাজেন্টো 1-তে আমরা গ্রাহকের নতুন পাসওয়ার্ডটি সহজেই আপডেট / পরিবর্তন করতে পারি।

Magento 2 এ কেবল ইমেলের সাথে পাসওয়ার্ড পুনরায় সেট করা সহায়তা করবে তবে সর্বদা নয়। এটি একটি সহজ প্রশ্ন হতে পারে, তবে কখনও কখনও এটি অনেক সময় সাশ্রয় করতে পারে।

  • Magento 2 এ গ্রাহকের পাসওয়ার্ড পরিবর্তন করার কোনও সহজ উপায় আছে কি?

  • ডাটাবেস থেকে এমন কোনও উপায় আছে যেখানে আমরা সরাসরি এনক্রিপশন প্রকারের সাহায্যে পাসওয়ার্ড পরিবর্তন করতে পারি?

সাহায্য প্রশংসা করা হবে।


অ্যাডমিন ব্যবহারকারীর জন্য এটি পরিবর্তন করতে চান?
সুরেশ চিকানী

এছাড়াও magento.stackexchange.com/questions/137555/… দেখুন । সম্ভাব্য সদৃশ? কেবলমাত্র একজনই "ডাটাবেসের মাধ্যমে" গ্রাহকের পাসওয়ার্ড পরিবর্তন করার জন্য স্পষ্টভাবে জানিয়েছে ...
7ochem

উত্তর:


8

বিদ্যমান গ্রাহকের পাসওয়ার্ড পরিবর্তন করার সহজ পদ্ধতির জন্য আপনি বিদ্যমান গ্রাহকের ইমেল আইডি এবং পাসওয়ার্ড ক্ষেত্রের গ্রাহক সিএসভি ফাইল ডেটা আমদানি করতে পারেন। আপনি নিজের পাসওয়ার্ডটি দিতে পারেন যা আপনি পরিবর্তন করতে চান এবং পাসওয়ার্ড_হ্যাশ ফাঁকা হওয়া উচিত।

নীচের দৃশ্যাবলী দেখুন:

এখানে চিত্র বর্ণনা লিখুনএখানে চিত্র বর্ণনা লিখুন


13

কনসোল কমান্ড তৈরি করা আমার মতে আপনার পক্ষে সেরা বেটি হবে।

সম্পাদনা করুন: আপনার যদি প্রয়োজন হয় তবে মডিউলটি এখানে উপলভ্য: https://github.com / ডিজিটালপিয়ানিজম / বিনিময় পাসওয়ার্ড

এখানে এমন একটি মডিউল রয়েছে যা এটি করবে (কেবল ২.১.২-এ পরীক্ষিত):

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

আমি পেয়েছি যে সেমিডিটি চালানোর সময় এরিয়া কোড সেট করা নেই। সাহায্য করুন.
কোভিগান আটসায়াম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.