Как изменить 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
}