[development] redirect login block when user enters wrong user/pass

Saint-Genest Gwenael gwenael.saint-genest at makina-corpus.com
Wed Oct 31 18:44:59 UTC 2007


Hi,

    Your "drupal_goto()" doesn't work because at this point the value
of $_REQUEST['destination'] is already set [1]. So your drupal_goto()
will reload the page but not with 'user'. After reload no validation
is needed, your function is not called :(


I think, a quick solution is to unset 'destination' value before
calling drupal_goto() :

 function myutility_user_login_validate($form_id, $form_values) {
   user_login_validate($form_id, $form_values);
   if (count(form_get_errors()) > 0) {
     unset($_REQUEST['destination']);
     drupal_set_message('test error message');
     drupal_goto('user');
   }

It's not a beauty solution but i think it's the simplest :)

Gwen


[1] http://api.drupal.org/api/function/drupal_goto/5


John Barreiros wrote:
> Hi
> 
> First, I realize what I'm doing isn't the most usable, but it's how the
> client wants it.
> 
> On the homepage, the user login block is styled all fancy and compact.
> Unfortunately, it's compactness prevents a place for an error message if the
> user messes up their username or password.
> 
> So, what I'd like to do, when the form fails validation, is redirect the
> user to "/user" which displays the regular login form along with the error
> messages that would of displayed within the block.
> I tried the following (in my own module),
> 
> function myutility_form_alter($form_id, &$form) {
>   switch ($form_id) {
>     case 'user_login_block':
>       $form['#validate'] = array('utility_user_login_validate' =>
> array($form_id, $form));
>       unset($form['links']);
>       break;
>   }
> }
> 
> function myutility_user_login_validate($form_id, $form_values) {
>   user_login_validate($form_id, $form_values);
>   if (count(form_get_errors()) > 0) {
>     drupal_set_message('test error message');
>     //print "here";
>     drupal_goto('user');
>   }
> }
> 
> The drupal_goto doesn't seem to work here. I'm fairly confident the code is
> making it to the drupal_goto because if I uncomment the "print" statement is
> does get called and prints out "here".
> 
> Any ideas why drupal_goto isn't working in this case?
> 
> Thanks for the help.
> 



More information about the development mailing list