[wp-trac] [WordPress Trac] #29889: Login redirect to login page even if authenticated

WordPress Trac noreply at wordpress.org
Sat Dec 12 20:36:17 UTC 2020


#29889: Login redirect to login page even if authenticated
-------------------------------------------------+-------------------------
 Reporter:  sgissinger                           |       Owner:  (none)
     Type:  defect (bug)                         |      Status:  new
 Priority:  normal                               |   Milestone:  Awaiting
                                                 |  Review
Component:  Login and Registration               |     Version:  3.9.2
 Severity:  normal                               |  Resolution:
 Keywords:  reporter-feedback needs-testing      |     Focuses:
  close                                          |
-------------------------------------------------+-------------------------

Old description:

> We use Wordpress in a private manner with use of '''login_redirect'''
> filter which is applied in the following code in file '''wp-login.php'''
> on line 777.
>
> {{{
> if ( empty( $_COOKIE[ LOGGED_IN_COOKIE ] ) ) {
>     if ( headers_sent() ) {
>         $user = new WP_Error( 'test_cookie', sprintf( __(
> '<strong>ERROR</strong>: Cookies are blocked due to unexpected output.
> For help, please see <a href="%1$s">this documentation</a> or try the <a
> href="%2$s">support forums</a>.' ),
>             __( 'http://codex.wordpress.org/Cookies' ), __(
> 'https://wordpress.org/support/' ) ) );
>     } elseif ( isset( $_POST['testcookie'] ) && empty( $_COOKIE[
> TEST_COOKIE ] ) ) {
>         // If cookies are disabled we can't log in even with a valid
> user+pass
>         $user = new WP_Error( 'test_cookie', sprintf( __(
> '<strong>ERROR</strong>: Cookies are blocked or not supported by your
> browser. You must <a href="%s">enable cookies</a> to use WordPress.' ),
>             __( 'http://codex.wordpress.org/Cookies' ) ) );
>     }
> }
>
> $requested_redirect_to = isset( $_REQUEST['redirect_to'] ) ?
> $_REQUEST['redirect_to'] : '';
> /**
>  * Filter the login redirect URL.
>  *
>  * @since 3.0.0
>  *
>  * @param string           $redirect_to           The redirect
> destination URL.
>  * @param string           $requested_redirect_to The requested redirect
> destination URL passed as a parameter.
>  * @param WP_User|WP_Error $user                  WP_User object if login
> was successful, WP_Error object otherwise.
>  */
> $redirect_to = apply_filters( 'login_redirect', $redirect_to,
> $requested_redirect_to, $user );
> }}}
>
> According to this, we use '''$user''' parameter in '''login_redirect'''
> filter to do some stuff.
>
> == Issue ==
> After a first log in attempt with good credentials, '''$user''' is a
> '''WP_Error''' which isn't normal.
> And when '''$user''' is a '''WP_Error''' my custom filter do redirect to
> login URL.
>
> Then I try to log in a second time just after the first one with the same
> credentials.
> In this second attempt, '''$user''' is a '''WP_User''', my custom filter
> do not redirect to login URL and everything works as expected.
>

> == Additional Information ==
> === Complement 1 ===
> After the first login, if I reach home URL (which is very different from
> login URL), I notice that I was successfully authenticated even if I was
> redirected to login URL by my custom filter.
>

> === Complement 2 ===
> It seems to happen after my browser started, subsequent logins even with
> different credentials works fine at the first time.
> If I restart my browser, this issue occurs and I'm redirected after first
> log in attempt.
>

> === Complement 3 ===
> Before our 3.9.2 update we were using 3.6.1 which handled this cookie
> check differently and did not overriden '''$user''' object.
>
> == Workaround ==
> We completely commented these lines and everything now works fine even
> with my custom '''login_redirect''' filter.
>

> Best

New description:

 We use WordPress in a private manner with use of '''login_redirect'''
 filter which is applied in the following code in file '''wp-login.php'''
 on line 777.

 {{{
 if ( empty( $_COOKIE[ LOGGED_IN_COOKIE ] ) ) {
     if ( headers_sent() ) {
         $user = new WP_Error( 'test_cookie', sprintf( __(
 '<strong>ERROR</strong>: Cookies are blocked due to unexpected output. For
 help, please see <a href="%1$s">this documentation</a> or try the <a
 href="%2$s">support forums</a>.' ),
             __( 'http://codex.wordpress.org/Cookies' ), __(
 'https://wordpress.org/support/' ) ) );
     } elseif ( isset( $_POST['testcookie'] ) && empty( $_COOKIE[
 TEST_COOKIE ] ) ) {
         // If cookies are disabled we can't log in even with a valid
 user+pass
         $user = new WP_Error( 'test_cookie', sprintf( __(
 '<strong>ERROR</strong>: Cookies are blocked or not supported by your
 browser. You must <a href="%s">enable cookies</a> to use WordPress.' ),
             __( 'http://codex.wordpress.org/Cookies' ) ) );
     }
 }

 $requested_redirect_to = isset( $_REQUEST['redirect_to'] ) ?
 $_REQUEST['redirect_to'] : '';
 /**
  * Filter the login redirect URL.
  *
  * @since 3.0.0
  *
  * @param string           $redirect_to           The redirect destination
 URL.
  * @param string           $requested_redirect_to The requested redirect
 destination URL passed as a parameter.
  * @param WP_User|WP_Error $user                  WP_User object if login
 was successful, WP_Error object otherwise.
  */
 $redirect_to = apply_filters( 'login_redirect', $redirect_to,
 $requested_redirect_to, $user );
 }}}

 According to this, we use '''$user''' parameter in '''login_redirect'''
 filter to do some stuff.

 == Issue ==
 After a first log in attempt with good credentials, '''$user''' is a
 '''WP_Error''' which isn't normal.
 And when '''$user''' is a '''WP_Error''' my custom filter do redirect to
 login URL.

 Then I try to log in a second time just after the first one with the same
 credentials.
 In this second attempt, '''$user''' is a '''WP_User''', my custom filter
 do not redirect to login URL and everything works as expected.


 == Additional Information ==
 === Complement 1 ===
 After the first login, if I reach home URL (which is very different from
 login URL), I notice that I was successfully authenticated even if I was
 redirected to login URL by my custom filter.


 === Complement 2 ===
 It seems to happen after my browser started, subsequent logins even with
 different credentials works fine at the first time.
 If I restart my browser, this issue occurs and I'm redirected after first
 log in attempt.


 === Complement 3 ===
 Before our 3.9.2 update we were using 3.6.1 which handled this cookie
 check differently and did not overriden '''$user''' object.

 == Workaround ==
 We completely commented these lines and everything now works fine even
 with my custom '''login_redirect''' filter.


 Best

--

Comment (by hellofromTonya):

 Hello @sgissinger,

 Is this still an issue for you?

 The ticket is marked for `close` as John was unable to reproduce. Before
 closing, I wanted to check in with you. Please advise.

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/29889#comment:6>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list