views:

2292

answers:

2

Any one know how to go back to the "last page" after a user is presented the login screen and chooses to create a new account?

Basically the sequence is this:

  1. User tries to get to protected content
  2. Redirected to login page
  3. If he logs in he is redirected to original page
  4. If he chooses "create new account" and fills it out, he is redirected to the home page

How do we get him automatically redirected to the original page (not a static page).

+4  A: 

There are several ways to go about this. The most straight-forward is to have a login link somewhere in the navigation that appends the destination to the url. The code for this is something like:

<?php
  if (user_is_anonymous()) {
    $link = l(t('Login'), 'user/login', array('query' => drupal_get_destination()));
  }
?>

You can also set a custom access denied page at admin/settings/error-reporting that could either go to a callback that outputs the above code, or to a simple php node that outputs that code.

Additionally, the user login block provided with Drupal core uses the same method to redirect a successful login back to the originating page.

Edit: Note that the above methods will rarely work for registration, because there are more steps involved there. Specifically, when a user needs to verify an email address, passing the originating destination along via the email would involve modifying the core user registration process.

It will potentially still work on a site configured to not verify email addresses. The idea then would be to provide 2 links: 1 for login and the other for registration, both passing along destination information.

LoginToboggan may also be worth pursuing, although it doesn't yet offer the exact registration feature you're looking for.

jhedstrom
That's almost exactly what I did. I basically customized the user login block with a link to the registration page that included the destination (with syntax like that). Seemed to work just fine.
Jared
A: 

straight php would be to include a header of this form:

<?php header("Location: " . $_SERVER['HTTP_REFERER']); ?>

for more information refer to the php manual

EDIT:

you can also include a hidden field in your form and set it to

$url = $_SERVER['PHP_SELF']; // or HTTP_REFERER depending on the setup

include the header code snipped to your registration form.

dassouki