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";
}