Đăng nhập theo chương trình trong Magento 2


8

Tôi đang tìm kiếm trong Magento Lớp đăng nhập một Khách hàng và tôi không tìm thấy vị trí của nó.

Tôi cần có thể đăng nhập người dùng bên ngoài một Magento.

Bất kỳ ý tưởng?

Câu trả lời:


10
$ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance ();
// Tải khách hàng
$ customer = $ objectManager-> tạo ('Magento \ Khách hàng \ Mô hình \ Khách hàng') -> tải (2); // 2 là ID khách hàng

// Tải phiên khách hàng
$ customerSession = $ objectManager-> tạo ('Magento \ Khách hàng \ Mô hình \ Phiên');
$ customerSession-> setCustomerAsLoggedIn ($ khách hàng);

if ($ customerSession-> isLoggedIn ()) {
    tiếng vang "Khách hàng đã đăng nhập";
} khác {
    echo "khách hàng không đăng nhập";
}

Một cách tốt hơn hiện nay với Magento 2 là:

được bảo vệ $ _customerFactory;
được bảo vệ $ _sessionFactory;

chức năng công cộng __construct (
    ...
    \ Magento \ Khách hàng \ Mẫu \ Khách hàng $ Khách hàng $,
    \ Magento \ Khách hàng \ Model \ sessionFactory $ sessionFactory,
    ...
)
{
    ...
    $ this -> _ customerFactory = $ customerFactory;
    $ this -> _ sessionFactory = $ sessionFactory;
    ...
}

Bây giờ hãy nói rằng đây là trên Bộ điều khiển Magento 2, sau đó chúng tôi có phần dưới đây:

thực thi chức năng công cộng ()
{
    ...
    $ customer = $ this -> _ customerFactory-> create () -> load ($ id) // $ id là 
    id khách hàng bạn muốn tải
    $ sessionManager = $ this -> _ sessionFactory-> create ();
    $ sessionManager-> setCustomerAsLoggedIn ($ khách hàng);
    ...
}

Cách tốt nhất là luôn luôn sử dụng phép nội xạ phụ thuộc để truy xuất các nhà máy mô hình hoặc giao diện cho công cụ bạn muốn sử dụng thay vì nhận các phiên bản trình quản lý đối tượng.


5

Hãy xem ứng dụng / mã / Magento / Khách hàng / Trình điều khiển / Tài khoản / 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();
  ....

Bạn là một phù thủy. Làm thế nào để bạn thậm chí tìm thấy công cụ này? Cố gắng làm bất cứ điều gì từ xa "khỏi con đường bị đánh đập" với Magento và những bài đăng như thế này cung cấp giải pháp cho các vấn đề của tôi. Cảm ơn.
WackGet
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.