Melden Sie sich programmgesteuert in Magento 2 an

8

Ich suche in Magento die Klasse , die einen Kunden anmeldet, und finde nicht, wo sich dieser befindet.

Ich muss in der Lage sein, einen Benutzer extern ein Magento anzumelden.

Irgendeine Idee?

Apalabrados
quelle

Antworten:

10
$ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance ();
// Kunden laden
$ customer = $ objectManager-> create ('Magento \ Customer \ Model \ Customer') -> load (2); // 2 ist die Kunden-ID

// Kundensitzung laden
$ customerSession = $ objectManager-> create ('Magento \ Customer \ Model \ Session');
$ customerSession-> setCustomerAsLoggedIn ($ customer);

if ($ customerSession-> isLoggedIn ()) {
    Echo "Kunde angemeldet";
}sonst{
    echo "Kunde ist nicht angemeldet";
}}

Ein besserer Weg mit Magento 2 ist heutzutage:

protected $ _customerFactory;
protected $ _sessionFactory;

öffentliche Funktion __construct (
    ...
    \ Magento \ Customer \ Model \ CustomerFactory $ customerFactory,
    \ Magento \ Customer \ Model \ SessionFactory $ sessionFactory,
    ...
)
{
    ...
    $ this -> _ customerFactory = $ customerFactory;
    $ this -> _ sessionFactory = $ sessionFactory;
    ...
}}

Nehmen wir nun an, dies ist auf einem Magento 2-Controller, dann haben wir Folgendes:

öffentliche Funktion execute ()
{
    ...
    $ customer = $ this -> _ customerFactory-> create () -> load ($ id) // $ id ist die 
    Kunden-ID, die Sie laden möchten
    $ sessionManager = $ this -> _ sessionFactory-> create ();
    $ sessionManager-> setCustomerAsLoggedIn ($ customer);
    ...
}}

Es wird immer empfohlen, die Abhängigkeitsinjektion zu verwenden, um entweder Modellfabriken oder Schnittstellen für das Tool abzurufen, das Sie verwenden möchten, anstatt Objektmanagerinstanzen abzurufen.

Narayan S.
quelle
5

Schauen Sie sich app / code / Magento / Customer / Controller / Account / LoginPost.php an

class LoginPost extends \Magento\Customer\Controller\AbstractAccount
{

  ....

  public function execute()
  {
    if ($this->session->isLoggedIn() || !$this->formKeyValidator->validate($this->getRequest())) {
        /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
        $resultRedirect = $this->resultRedirectFactory->create();
        $resultRedirect->setPath('*/*/');
        return $resultRedirect;
    }

    if ($this->getRequest()->isPost()) {
        $login = $this->getRequest()->getPost('login');
        if (!empty($login['username']) && !empty($login['password'])) {
            try {
                $customer = $this->customerAccountManagement->authenticate($login['username'], $login['password']);
                $this->session->setCustomerDataAsLoggedIn($customer);
                $this->session->regenerateId();
  ....
Renon Stewart
quelle
Du bist ein Zauberer. Wie findest du dieses Zeug überhaupt? Der Versuch, mit Magento irgendetwas außerhalb der ausgetretenen Pfade zu tun, und es sind Beiträge wie diese, die die Lösungen für meine Probleme bieten. Vielen Dank.
WackGet