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