По умолчанию, если я не вошел в систему и пытаюсь посетить это в браузере:
http://localhost:8000/home
Он перенаправляет меня на http://localhost:8000/auth/login
Как мне изменить, чтобы перенаправить меня на http://localhost:8000/login
По умолчанию, если я не вошел в систему и пытаюсь посетить это в браузере:
http://localhost:8000/home
Он перенаправляет меня на http://localhost:8000/auth/login
Как мне изменить, чтобы перенаправить меня на http://localhost:8000/login
Я хотел сделать то же самое в 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 минут, чтобы понять это. Пожалуйста, напишите мне, если вы нашли это в документации, потому что я не смог.
return redirect()->guest('login');, а не return redirect('login');?
- person Inigo; 09.10.2017
if (in_array('admin', $exception->guards())) { ... }
- person Jeffrey; 15.11.2017
Просто чтобы расширить ответ @ Ultimate:
App\Http\Middleware\Authenticate::handle() метод и заменить auth/login на /login.$loginPath в свой класс \App\Http\Controllers\Auth\AuthController. Почему? См. В результате у вас будет это в вашем промежуточном программном обеспечении:
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
}
Это решение Laravel 5.4.
В app / Exceptions / Handler.php появился новый метод unauthenticated (), который обрабатывает неаутентифицированных пользователей и перенаправляет их на путь входа в систему.
Так что измени
return redirect()->guest('login');
to
return redirect()->guest('auth/login');
unauthenticated() теперь удален из App / Exceptions / Handler.php. Это похоже на то, что с каждой версией они хотят еще больше запутать внутреннюю работу системы аутентификации. Очень неприятно для тех из нас, кто хочет его изменить или даже просто понять.
- person Inigo; 16.10.2017
В Laravel 5.6 перейдите в папку app / Exceptions и откройте Handler.php, добавьте новый метод, который переопределяет неаутентифицированный метод следующим образом:
protected function unauthenticated($request, AuthenticationException $exception)
{
if($request->ajax())
{
return response([
"message" => "Unauthenticated.",
"data" => [],
],401);
}
return redirect()->to('/');
}
Этот метод запускается, когда вы получаете доступ к защищенному маршруту с помощью встроенного промежуточного программного обеспечения «auth». Теперь у вас будет полный контроль, куда перенаправить или какой ответ будет отправлен.
Проверки аутентификации выполняются с использованием промежуточного программного обеспечения в Laravel 5.
А промежуточное ПО для auth - App\Http\Middleware\Authenticate.
Таким образом, вы можете изменить его в handle методе промежуточного программного обеспечения.
РЕДАКТИРОВАТЬ: в Laravel 5.1 просто добавьте protected $ redirectPath = '/ url / you / want'; в AuthController, чтобы добиться цели.
ССЫЛКА: 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);
}
Надеюсь, это поможет.
не могли бы вы вывести php artisan route:list пожалуйста
Вы правы, вы можете установить следующие атрибуты:
protected $loginPath = 'xxx';
protected $redirectPath = 'xxx';
protected $redirectAfterLogout = 'xxx';
Установите этот атрибут на себя AuthController.php
Поскольку ваш другой вопрос был отмечен как дубликат .. Постараюсь ответить здесь ..
Сначала вам нужно изменить свой маршрут, например
<?php
Route::get(config('constants.cms_path') . '/login', [
'as' => 'login',
'uses' => 'Auth\AuthController@getLogin'
]);
В вашем клинке ... убедитесь, что вы используете именованный маршрут в ссылке URL-адреса входа, например
{{ route('login') }}
В Middleware / Authenticate.php измените гостя перенаправления на
return redirect()->guest(config('constants.cms_path') . '/login');
Чтобы изменить перенаправление после входа в систему, вам нужно только перейти в app / Http / Controllers / Auth / LoginController.php и добавить это внутри класса LoginController:
protected $redirectTo = '/redirect-url-here';
То же самое для перенаправления после регистрации нового пользователя, но в этом случае на AuthController.php
Для Laravel 5.4 вы можете установить protected $ redirectTo = '/'; в ФАЙЛЕ LoginController.php. Или в файле RegistersUsers.php вы можете
protected function registered(Request $request, $user)
{
return redirect('tosomeRoute');
//Note: This code will run when
//The user has been registered
}