2 namespace Drush\Commands\core;
4 use Drupal\user\Entity\User;
5 use Drush\Commands\DrushCommands;
7 use Drush\Exec\ExecTrait;
8 use Drush\SiteAlias\SiteAliasManagerAwareInterface;
9 use Drush\SiteAlias\SiteAliasManagerAwareTrait;
11 class LoginCommands extends DrushCommands implements SiteAliasManagerAwareInterface
14 use SiteAliasManagerAwareTrait;
18 * Display a one time login link for user ID 1, or another user.
22 * @param string $path Optional path to redirect to after logging in.
23 * @option name A user name to log in as. If not provided, defaults to uid=1.
24 * @option browser Optional value denotes which browser to use (defaults to operating system default). Use --no-browser to suppress opening a browser.
25 * @option redirect-port A custom port for redirecting to (e.g., when running within a Vagrant environment)
27 * @handle-remote-commands
28 * @aliases uli,user-login
29 * @usage drush user:login
30 * Open default web browser and browse to homepage, logged in as uid=1.
31 * @usage drush user:login --name=ryan node/add/blog
32 * Open default web browser (if configured or detected) for a one-time login link for username ryan that redirects to node/add/blog.
33 * @usage drush user:login --browser=firefox --mail=drush@example.org
34 * Open firefox web browser, and login as the user with the e-mail address drush@example.org.
36 public function login($path = '', $options = ['name' => '1', 'browser' => true, 'redirect-port' => self::REQ])
39 // Redispatch if called against a remote-host so a browser is started on the
40 // the *local* machine.
41 $aliasRecord = $this->siteAliasManager()->getSelf();
42 if ($aliasRecord->isRemote()) {
43 $return = drush_invoke_process($aliasRecord, 'user-login', [$path], Drush::redispatchOptions(), ['integrate' => false]);
44 if ($return['error_status']) {
45 throw new \Exception('Unable to execute user login.');
47 $link = is_string($return['object']) ?: current($return['object']);
50 if (!Drush::bootstrapManager()->doBootstrap(DRUSH_BOOTSTRAP_DRUPAL_FULL)) {
51 throw new \Exception(dt('Unable to bootstrap Drupal.'));
54 if ($options['name'] == 1) {
55 $account = User::load(1);
56 } elseif (!$account = user_load_by_name($options['name'])) {
57 throw new \Exception(dt('Unable to load user: !user', ['!user' => $options['name']]));
59 $link = user_pass_reset_url($account). '/login';
61 $link .= '?destination=' . $path;
64 $port = $options['redirect-port'];
65 $this->startBrowser($link, false, $port, $options['browser']);
66 // Use an array for backwards compat.
67 drush_backend_set_result([$link]);