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?

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.


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();
  ....

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.