回答:
$ 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); ... }
オブジェクトマネージャーのインスタンスを取得する代わりに、依存関係注入を使用して、使用するツールのモデルファクトリまたはインターフェイスを取得することが常にベストプラクティスです。
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();
....