For M1 i had a php file which took care of logging into admin, now i need the same for M2 but i can't get it to work.
This is my external file:
use Magento\Framework\App\Bootstrap;
require __DIR__ . '/app/bootstrap.php';
class TestApp
extends \Magento\Framework\App\Http
implements \Magento\Framework\AppInterface {
public function launch()
{
$areaCode = 'adminhtml';
$username = 'admin';
$this->_state->setAreaCode($areaCode);
$this->_objectManager->configure($this->_configLoader->load($areaCode));
/** @var \Magento\User\Model\User $user */
$user = $this->_objectManager->get('Magento\User\Model\User')->loadByUsername($username);
/** @var \Magento\Backend\Model\Auth\Session $session */
$session = $this->_objectManager->get('Magento\Backend\Model\Auth\Session');
$session->setUser($user);
$session->processLogin();
if ($session->isLoggedIn()) {
/** @var \Magento\Backend\Model\UrlInterface $backendUrl */
$backendUrl = $this->_objectManager->get('Magento\Backend\Model\UrlInterface');
$path = $backendUrl->getStartupPageUrl();
$url = $backendUrl->getUrl($path);
$url = str_replace('autologin.php', 'index.php', $url);
echo $url;
//header('Location: '.$url);
} else {
echo "login failed";
}
exit;
}
}
$bootstrap = Bootstrap::create(BP, $_SERVER);
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
/** @var \Magento\Framework\App\Http $app */
$app = $bootstrap->createApplication('TestApp');
$bootstrap->run($app);
The session returns isLoggedIn = true and i receive the URL:
http://local.domain.dev/index.php/admin/admin/dashboard/index/key/2e3a171171d22a5c2331780f874911ba95824f6a6d0e73894771bf9a40f26ce9/
If i visit that link or if i enable the header() part, i receive the login form 🙁
I see that i'm missing a cookie (which is set when login form is shown) and i traced it to Magento\Backend\Model\Session\AdminConfig
but i'm a bit lost putting them together.
Best Answer
Found the missing link - posting here if anyone will ever need it :D
This is the whole function from my question class and it works!