Как перенаправить неаутентифицированных пользователей на страницу входа - PullRequest
0 голосов
/ 11 апреля 2019

Я делаю приложение, которое требует пользователя и пароль для доступа. Каждый пользователь должен столкнуться с видом входа в систему. В настоящее время, написав URL вручную, я могу получить доступ ко всем маршрутам без входа в систему. Я хочу перенаправить каждого неаутентифицированного пользователя в представление входа в систему, чтобы они больше ничего не видели, пока не войдут в систему.

LoginController

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    public function redirectTo() {
        $isAuth = Auth::check();

        if ($isAuth) {
            return redirect('dashboard');
        } else {
            return redirect('login');
        }
    }

    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    public function logout(Request $request) 
    {
        Auth::logout();

        return redirect('/login');
    }
}

Маршруты

<?php

Route::get('/', function () {
    return view('home');
});

Route::resource('project','ProjectController');
Route::resource('client','ClientController');
Route::resource('task','TaskController');
Route::resource('people','PeopleController');

Route::get('/login', function () {
    return view('login');
});

Route::get('logout', '\App\Http\Controllers\Auth\LoginController@logout');

Auth::routes();

Route::get('/dashboard', 'DashboardController@index');

Ответы [ 3 ]

1 голос
/ 11 апреля 2019

Вы должны использовать промежуточное программное обеспечение для этого. Чтобы получить информацию о промежуточном программном обеспечении, проверьте здесь laravel.com/docs/master/middleware

Давайте посмотрим, как вы можете использовать для этой цели промежуточное программное обеспечение авторизации Laravel по умолчанию:

Прежде всего избавьтесь от AdminBaseController и используйте только AdminController

Затем вы должны убедиться, что промежуточное ПО аутентификации включено в файле app \ Http \ Kernel.php

У вас должна быть строка:

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,

Это означает, что промежуточное ПО активно и доступно для ваших маршрутов.

Теперь давайте перейдем к классу промежуточного программного обеспечения в app \ Http \ Middleware \ Authenticate.php, чтобы указать поведение промежуточного программного обеспечения:

этот метод будет запущен перед вашим конструктором контроллера

public function handle($request, Closure $next)
{
    //check here if the user is authenticated
    if ( ! $this->auth->user() )
    {
        // here you should redirect to login 
    }

    return $next($request);
}

Теперь остается только решить, для каких маршрутов следует применять промежуточное программное обеспечение. Предположим, у вас есть два маршрута, которые вы хотите сделать доступными только для аутентифицированных пользователей, вам следует указать, чтобы использовать промежуточное ПО для этих двух маршрутов следующим образом:

Route::group( ['middleware' => 'auth' ], function()
{
    Route::get('admin/home', 'AdminController@index');
});
0 голосов
/ 11 апреля 2019

Вы должны переместить Auth::routes() до первого маршрута

 <?php

Auth::routes()

Route::get('/', function () {
     return view('home');
 });

И использовать промежуточное ПО auth в своих контроллерах, где вы хотите, чтобы только аутентифицированный пользователь.

public function __construct()
{
    $this->middleware('auth');
}
0 голосов
/ 11 апреля 2019

Переместите Auth:Routes(); сразу после

Route::get('/', function () {
    return view('home');
});

Тогда все ваши маршруты будут защищены аутентификацией.

...