Как перенаправить пользователя, который входит в систему, если этот вход не выполнен? - PullRequest
0 голосов
/ 24 июля 2011

Я использую Drupal 6.

У меня есть страница со ссылкой для входа в систему, которая открывает всплывающее окно лайтбокса JQuery (на самом деле это просто наложенный элемент div, отображающий содержимое другой страницы), с помощью которого пользователь может войти в систему. Это всплывающее окно содержит текст страницы / логин /, который в основном просто:

<div id="login">
<?php print drupal_get_form('user_login_block'); ?>
</div>

У меня есть user_login.tpl.php, который я использую для оформления формы входа.

Когда пользователь отправляет форму входа, я хотел бы перенаправить его обратно на домашнюю страницу, независимо от того, успешно они вошли или нет. Я должен просто иметь возможность отображать $ сообщения на этой странице, чтобы сообщить им, вошли ли они в систему или неправильно ввели свой пароль, и т. Д. В настоящее время, если пользователь вводит свои данные для входа и отправляет их, они получают ( через действие формы) через / login /, которая не является «реальной» страницей (поскольку она просто содержит содержимое «всплывающего окна»).

Я добавил функцию для изменения перенаправления формы обратно на домашнюю страницу:

function mr_misc_hooks_form_user_login_block_alter(&$form, &$form_state/*, $form_id*/) {
/* Drupal will ignore redirects we set for the login block unless we do the next line.
 * See http://drupal.org/node/580144#comment-3368072 
 * I spent a *lot* of time trying to work this out. :( */
unset($_REQUEST['destination'], $_REQUEST['edit']['destination']);
$form['#redirect'] = 'node';
}

Это успешно перенаправляет пользователя на отправку, которая успешно выполняется, т. Е. Когда отправка завершает вход пользователя. Он не выполняет перенаправление при неудачной отправке.

Как я могу перенаправить пользователей обратно на домашнюю страницу, если их вход не выполнен?

1 Ответ

0 голосов
/ 25 июля 2011

Вот идея другого подхода.Извините, у меня нет времени, чтобы проверить или подтвердить, что это работает.

<?php
// add a custom submit handler for the user_login form
function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'user_login') {
    $form['#submit'][] = 'mymodule_myloginhandler';
  }
}

// set message based on if user was logged in, and then the redirect
function mymodule_myloginhandler($form, &$form_state) {
  global $user;

  if ($user->uid) {
    drupal_set_message('Login Successful');
  }
  else {
    drupal_set_message('Invalid login.');
  }

  $form_state['redirect'] = 'node';
}
?>
...