What happened to Laravel's redirectTo() method?

This is the redirectPath() method in src/Illuminate/Foundation/Auth/RedirectsUsers.php in Laravel v5.3.28

public function redirectPath()
{
    return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
}

In the later versions 5.3.29 and above. This was changed in file with commit:

Add auth redirect path generation method (#16896)

 public function redirectPath()
 {
     if (method_exists($this, 'redirectTo')) {
         return $this->redirectTo();
     }
     return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
 }

So this part of documentation applies for Laravel version 5.3.29 and later only

If the redirect path needs custom generation logic you may define a redirectTo method instead of a redirectTo property:

protected function redirectTo() { // }


Solution for v5.3.28

To make redirectTo() method work in v5.3.28, manually add this in redirectPath() method in src/Illuminate/Foundation/Auth/RedirectsUsers.php.

if (method_exists($this, 'redirectTo')) {
    return $this->redirectTo();
}

Simple solution

Override redirectPath() instead of redirectTo().

Using raw string return:

protected function redirectPath()
{
  if (Auth::user()->role==0) {
    return '/volunteer';
  } else {
    return '/donor';
  }
}

Or overriding redirectPath() to the Laravel 5.3.29 redirectPath() version and then your redirectTo() method will work.

public function redirectPath()
{
  if (method_exists($this, 'redirectTo')) {
   return $this->redirectTo();
  }     
  return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
}

Why redirectTo() is not working

Tested overriding the redirectPath() or redirectTo() method in App\Http\Controllers\Auth\LoginController.php on a clean Laravel v.5.3.29 + default Auth, they work as expected.

Example of redirectTo() method

Documentation says:

If the redirect path needs custom generation logic you may define a redirectTo method instead of a redirectTo property.

So, the function should look something like this:

protected function redirectTo()
{
    if(condition) {
      return "/your/path";
    } 
    return "/your/secondpath";
}