Ticket #7002 (closed defect (bug): fixed)

Opened 4 years ago

Last modified 3 years ago

Can't control where a user redirects to when they log in

Reported by: AaronCampbell Owned by: ryan
Priority: normal Milestone: 2.6.2
Component: General Version:
Severity: normal Keywords: has-patch needs-testing
Cc:

Description

The 'login' case in wp-login FIRST sets $redirect_to THEN runs wp_signon(). If we switch that, a plugin could hook into wp_signon's wp_login hook, and set $_REQUESTredirect_to? based on user type, capabilities, name, etc. It would be nice, and there is no downside that I see.

Attachments

7002.001.diff Download (593 bytes) - added by AaronCampbell 4 years ago.
7002.filter.diff Download (553 bytes) - added by ryan 3 years ago.

Change History

  • Keywords has-patch needs-testing added

comment:2   ryan4 years ago

  • Status changed from new to closed
  • Resolution set to fixed

(In [7958]) Relocate signon to the top. Props AaronCampbell. fixes #7002

comment:3   ryan4 years ago

  • Milestone changed from 2.5.2 to 2.9

Milestone 2.5.2 deleted

  • Milestone changed from 2.9 to 2.6
  • Status changed from closed to reopened
  • Resolution fixed deleted
  • Milestone changed from 2.6 to 2.6.2

[8069] reverted [7958] (accidentally I assume)

comment:6   ryan3 years ago

  • Owner changed from anonymous to ryan
  • Status changed from reopened to new

ryan3 years ago

comment:7   ryan3 years ago

How about a login_redirect filter called after wp_login(). Altering the redirect before login can mess up the SSL detection stuff. See patch.

That's fine. I don't think we really need to pass $_REQUEST['redirect_to'] since the only difference would be https vs http right? I would be ok with this:

$redirect_to = apply_filters('login_redirect', $redirect_to, $user);

However, extra data doesn't hurt I suppose. Also, in the 2.6 branch if $_REQUEST['redirect_to'] is set then $_REQUEST['redirect_to'] and $redirect_to are identical.

comment:9   ryan3 years ago

  • Status changed from new to closed
  • Resolution set to fixed

(In [8736]) Add login_redirect filter. fixes #7002 for trunk

(In [8737]) Add login_redirect filter. fixes #7002 for 2.6

Went ahead and passed redirect_to from the request just in case someone needs to know if it was set or not.

Since it's a super-global, can't you just check that with $_REQUEST['redirect_to'] inside your function? Again, it doesn't matter to me if you add extra in there.

Thanks for handling it.

Note: See TracTickets for help on using tickets.