Magento 2にプログラムでログインする


8

Magento the Classで顧客にログインしていますが、どこにあるのかわかりません。

外部からMagentoにユーザーをログインできるようにする必要があります。

何か案が?

回答:


10
$ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance();
//顧客をロードします
$ customer = $ objectManager-> create( 'Magento \ Customer \ Model \ Customer')-> load(2); // 2はお客様IDです

//顧客セッションを読み込みます
$ customerSession = $ objectManager-> create( 'Magento \ Customer \ Model \ Session');
$ customerSession-> setCustomerAsLoggedIn($ customer);

if($ customerSession-> isLoggedIn()){
    echo "お客様がログインしました";
}そうしないと{
    echo "顧客はログインしていません";
}

最近のMagento 2のより良い方法は次のとおりです。

保護された$ _customerFactory;
保護された$ _sessionFactory;

パブリック関数__construct(
    ...
    \ Magento \ Customer \ Model \ CustomerFactory $ customerFactory、
    \ Magento \ Customer \ Model \ SessionFactory $ sessionFactory、
    ...
)
{
    ...
    $ this-> _ customerFactory = $ customerFactory;
    $ this-> _ sessionFactory = $ sessionFactory;
    ...
}

これがMagento 2コントローラー上にあるとすると、次のようになります。

パブリック関数execute()
{
    ...
    $ customer = $ this-> _ customerFactory-> create()-> load($ id)// $ idは 
    ロードする顧客ID
    $ sessionManager = $ this-> _ sessionFactory-> create();
    $ sessionManager-> setCustomerAsLoggedIn($ customer);
    ...
}

オブジェクトマネージャーのインスタンスを取得する代わりに、依存関係注入を使用して、使用するツールのモデルファクトリまたはインターフェイスを取得することが常にベストプラクティスです。


5

app / code / Magento / Customer / Controller / Account / LoginPost.phpを見てください。

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

あなたは魔法使いです。どうやってこれを見つけるのですか?Magentoを使ってリモートで「人里離れたところ」で何かをしようとすると、このような投稿が私の問題の解決策を提供します。ありがとう。
WackGet
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.