Sometimes we need to login into our Drupal site not through the regular login form. For example if we have trouble with login form or maybe we just forgot our password... Here are few ways to login into your Drupal site not through login form.
For Drupal 8 you just need to create file your_auto_login.php in the Drupal root directory, put there the next code and open this file in your browser:
<?php
use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpFoundation\Request;
$autoloader = require_once 'autoload.php';
$kernel = new DrupalKernel('prod', $autoloader);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
// ID of the user.
$uid = THE_AUTOMATIC_USER_ID; //Do not use 1 because it is the super admin
You need to put index.php at root
$uid ='Your User ID Here';
$account = \Drupal\user\Entity\User::load($uid);
\Drupal::service('session')->migrate();
\Drupal::service('session')->set('uid', $account->id());
\Drupal::moduleHandler()->invokeAll('user_login', array($account));
or
$uid ='Your User ID Here';
$user = Drupal\user\Entity\User::load($uid);
user_login_finalize($user);
Comments8
Thanks for this code
Thanks for this code, you save my day. It's working for me.
Login
How do you trigger this way of login? Does the code need to be in the controller?
How to login programmatically into Drupal
Sometimes we need to login into our Drupal site not through the regular login form. For example if we have trouble with login form or maybe we just forgot our password... Here are few ways to login into your Drupal site not through login form.
For Drupal 8 you just need to create file your_auto_login.php in the Drupal root directory, put there the next code and open this file in your browser:
<?php
use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpFoundation\Request;
$autoloader = require_once 'autoload.php';
$kernel = new DrupalKernel('prod', $autoloader);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
// ID of the user.
$uid = THE_AUTOMATIC_USER_ID; //Do not use 1 because it is the super admin
$user = Drupal\user\Entity\User::load($uid);
user_login_finalize($user);
$response->send();
$kernel->terminate($request, $response);
If Forget password
If you forget the password, use drush to recover
drush uli
Use this code in custom module
Hi,
When I am using this code in a custom module, I am getting below error
"InvalidArgumentException: Cannot redirect to an empty URL. in Symfony\Component\HttpFoundation\RedirectResponse->setTargetUrl() (line 76 of /websites/www/html/drl/vendor/symfony/http-foundation/RedirectResponse.php) #0 /websites/www/html/drl/vendor/symfony/http-foundation/RedirectResponse.php(39): Symfony\Component\HttpFoundation\RedirectResponse->setTargetUrl(NULL) #1 /websites/www/html/drl/sites/grants/themes/grants/grants.theme(1536): Symfony\Component\HttpFoundation\RedirectResponse->__construct(NULL) #2 [internal function]: custom_login_user_login(Object(Drupal\user\Entity\User)) #3 /websites/www/html/drl/core/lib/Drupal/Core/Extension/ModuleHandler.php(402): call_user_func_array('custom_login_us...', Array) #4 /websites/www/html/drl/core/modules/user/user.module(559): Drupal\Core\Extension\ModuleHandler->invokeAll('user_login', Array) #5 /websites/www/html/drl/your_auto_login.php(12): user_login_finalize(Object(Drupal\user\Entity\User)) #6 {main}."
Can you please help me where the thing is going wrong.
IF you forgate password of drupal 8
You need to put index.php at root
$uid ='Your User ID Here';
$account = \Drupal\user\Entity\User::load($uid);
\Drupal::service('session')->migrate();
\Drupal::service('session')->set('uid', $account->id());
\Drupal::moduleHandler()->invokeAll('user_login', array($account));
or
$uid ='Your User ID Here';
$user = Drupal\user\Entity\User::load($uid);
user_login_finalize($user);
$response->send();
Undefined user_login_finalize function
Are you using a drupal 8 module ?
Hello,
is this (F:\wamp64\www\oxshot-rep-sandeep\your_auto_login.php) a drupal 8 module ? If you use it out side of drupal, the error is normal.