Как изменить URL-адрес перенаправления по умолчанию фильтра Laravel 5 Auth?
По умолчанию, если я не зарегистрирован, и я попробую посетить его в браузере:
http://localhost:8000/home
Он перенаправляет меня на http://localhost:8000/auth/login
Как я могу изменить перенаправление меня на http://localhost:8000/login
Ответы
Ответ 1
Просто чтобы увеличить @ultimate ответ:
- Вам нужно изменить метод
App\Http\Middleware\Authenticate::handle()
и изменить auth/login
на /login
.
- Чтобы добавить свойство
$loginPath
в класс \App\Http\Controllers\Auth\AuthController
. Зачем? См. Источник Laravel.
В результате вы получите это в своем промежуточном программном обеспечении:
namespace App\Http\Middleware;
class Authenticate {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($this->auth->guest())
{
if ($request->ajax())
{
return response('Unauthorized.', 401);
}
else
{
return redirect()->guest('/login'); // <--- note this
}
}
return $next($request);
}
}
И это в вашем AuthController:
namespace App\Http\Controllers\Auth;
class AuthController extends Controller
{
protected $loginPath = '/login'; // <--- note this
// ... other properties, constructor, traits, etc
}
Ответ 2
Я хотел сделать то же самое в Laravel 5.5. Обработка аутентификации переместилась на Illuminate\Auth\Middleware\Authenticate
, который выдает Illuminate\Auth\AuthenticationException
.
Это исключение обрабатывается в Illuminate\Foundation\Exceptions\Hander.php
, но вы не хотите изменять исходные файлы поставщика, поэтому вы можете перезаписать его своими файлами проекта, добавив его в App\Exceptions\Handler.php
.
Чтобы сделать это, добавьте следующее в начало класса Handler
в App\Exceptions\Handler.php
:
use Illuminate\Auth\AuthenticationException;
Затем добавьте следующий метод, при необходимости отредактировав:
/**
* Convert an authentication exception into an unauthenticated response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $exception
* @return \Illuminate\Http\Response
*/
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
return redirect()->guest('login'); //<----- Change this
}
Просто измените return redirect()->guest('login');
на return redirect()->guest(route('auth.login'));
или что-нибудь еще.
Я хотел записать это, потому что мне понадобилось больше 5 минут, чтобы понять это. Пожалуйста, бросьте мне строку, если вам удалось найти это в документах, потому что я не мог.
Ответ 3
Это решение Laravel 5.4:
В app/Exceptions/Handler.php существует новый метод unauthenticated(), который обрабатывает неавторизованных пользователей и перенаправляет на путь входа.
Итак, измените
return redirect()->guest('login');
к
return redirect()->guest('auth/login');
Ответ 4
Проверка подлинности выполняется с использованием промежуточного программного обеспечения в Laravel 5.
И промежуточное ПО для auth App\Http\Middleware\Authenticate
.
Итак, вы можете изменить его в методе handle
промежуточного программного обеспечения.
Ответ 5
EDIT: на Laravel 5.1 просто добавьте protected $redirectPath = '/url/you/want';, чтобы AuthController выполнил трюк.
REFER: http://laravel.com/docs/5.1/authentication#included-authenticating
В Laravel 5.1 он полностью перемещен в другое промежуточное программное обеспечение с именем RedirectIfAuthenticated.php в разделе App\Http\Middleware
public function handle($request, Closure $next)
{
if ($this->auth->check()) {
return redirect('/'); //change this part to anywhere you wish to be redirected to
}
return $next($request);
}
Надеюсь, что это поможет.
Ответ 6
Поскольку ваш другой question был отмечен как дубликат. Я постараюсь ответить на него здесь.
Сначала вам нужно изменить маршрут, как
<?php
Route::get(config('constants.cms_path') . '/login', [
'as' => 'login',
'uses' => 'Auth\[email protected]'
]);
В вашем клиенте... убедитесь, что вы используете именованный маршрут в ссылке URL-адреса входа, например
{{ route('login') }}
В Middleware/Authenticate.php измените гостевую страницу переадресации на
return redirect()->guest(config('constants.cms_path') . '/login');
Ответ 7
можете ли вы, пожалуйста, вывести php artisan route:list
пожалуйста
Вы правы, вы можете установить следующие атрибуты:
protected $loginPath = 'xxx';
protected $redirectPath = 'xxx';
protected $redirectAfterLogout = 'xxx';
Установите для этого атрибута AuthController.php
Ответ 8
Чтобы изменить перенаправление после входа в систему, вам нужно перейти только к приложению /Http/Controllers/Auth/LoginController.php и добавить его внутри класса LoginController:
protected $redirectTo = '/redirect-url-here';
То же самое для перенаправления после нового регистра пользователей, но в этом случае на AuthController.php
Ответ 9
Для Laravel 5.4 Вы можете установить protected $redirectTo = '/'; в LoginController.php FILE.
Или в файле RegistersUsers.php вы можете
protected function registered(Request $request, $user)
{
return redirect('tosomeRoute');
//Note: This code will run when
//The user has been registered
}