Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как изменить URL-адрес перенаправления по умолчанию для фильтра аутентификации Laravel 5?

Автор вопроса: VladimirОтветов: 10

По умолчанию, если я не вошел в систему и пытаюсь посетить это в браузере:

http://localhost:8000/home

Он перенаправляет меня на http://localhost:8000/auth/login

Как мне изменить, чтобы перенаправить меня на http://localhost:8000/login

  • просто измените метод обработки промежуточного программного обеспечения аутентификации с помощью именованного маршрута. PriyankMotivaras 13.11.2020

phplaravel-5

Ответы

Ответ 1 · рейтинг 43 · Moritz Ewert

Я хотел сделать то же самое в 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 минут, чтобы понять это. Пожалуйста, напишите мне, если вы нашли это в документации, потому что я не смог.

Ответ 2 · рейтинг 31 · e1v

Просто чтобы расширить ответ @ Ultimate:

  1. Вам нужно изменить App\Http\Middleware\Authenticate::handle() метод и заменить auth/login на /login.
  2. Затем вам нужно добавить свойство $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
}

Ответ 3 · рейтинг 11 · Salil Kothadia

Это решение Laravel 5.4.

В app / Exceptions / Handler.php появился новый метод unauthenticated (), который обрабатывает неаутентифицированных пользователей и перенаправляет их на путь входа в систему.

Так что измени

return redirect()->guest('login');

to

return redirect()->guest('auth/login');

Ответ 4 · рейтинг 5 · Darryldecode

В 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". Теперь у вас будет полный контроль, куда перенаправить или какой ответ будет отправлен.

Ответ 5 · рейтинг 4 · ultimate

Проверки аутентификации выполняются с использованием промежуточного программного обеспечения в Laravel 5.

А промежуточное ПО для auth - App\Http\Middleware\Authenticate.

Таким образом, вы можете изменить его в handle методе промежуточного программного обеспечения.

Ответ 6 · рейтинг 3 · marco8757

РЕДАКТИРОВАТЬ: в 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);
}

Надеюсь, это поможет.

Ответ 7 · рейтинг 1 · Nikunj K.

не могли бы вы вывести php artisan route:list пожалуйста

Вы правы, вы можете установить следующие атрибуты:

protected $loginPath = 'xxx';

protected $redirectPath = 'xxx';

protected $redirectAfterLogout = 'xxx';

Установите этот атрибут на себя AuthController.php

Ответ 8 · JLPuro

Поскольку ваш другой вопрос был отмечен как дубликат .. Постараюсь ответить здесь ..

Сначала вам нужно изменить свой маршрут, например

<?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');

Ответ 9 · asanchez

Чтобы изменить перенаправление после входа в систему, вам нужно только перейти в app / Http / Controllers / Auth / LoginController.php и добавить это внутри класса LoginController:

protected $redirectTo = '/redirect-url-here';

То же самое для перенаправления после регистрации нового пользователя, но в этом случае на AuthController.php

Ответ 10 · Daud khan

Для 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
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы