laravel custom auth - попытка (), сессия - PullRequest
0 голосов
/ 11 февраля 2019

Я учусь создавать собственные системы авторизации.Я создал собственную охрану Player.В моей тестовой функции я использую попытку () аутентификации пользователя.Проверка пройдена.Затем я создал метод test2, доступный только зарегистрированному пользователю.

Мой Маршрут :

Route::get('test', 'MyController@test');
Route::get('test2', 'MyController@test2')->middleware('auth');

Мой Контроллер :

class MyController extends Controller
{
    public function test()
    {
        $cr = ['name' => 'pl', 'password' => 'pl'];

        if (Auth::guard('player')->attempt($cr)) {
            $user = Auth::guard('player')->user();
            return 'ok';
        }

        return 'not found';
    }

    public function test2()
    {
        return 'test2';
    }
}

Моя конфигурация защиты :

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'player' => [
            'driver' => 'session',
            'provider' => 'player',
        ],

        'club' => [
            'driver' => 'session',
            'provider' => 'club',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'player' => [
            'driver' => 'eloquent',
            'model' => App\Player::class,
        ],

        'club' => [
            'driver' => 'eloquent',
            'model' => App\Club::class,
        ],
    ],

Я хочу получить доступ к маршруту test2 вручную (не перенаправляя) после выполнения функции теста, но я не могу 'т.Я получаю форму авторизации по умолчанию.

Должен ли я написать свое промежуточное ПО или установить сеанс вручную?Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вам нужно написать собственное промежуточное ПО,

<?php

namespace App\Http\Middleware;

use Closure;

class RedirectIfNotPlayer
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = 'player')
    {
        if(!auth()->guard($guard)->check()) {
            return redirect(url('/player/login'));
        }

        return $next($request);

    }
}

добавить это промежуточное ПО в файл kernel.php, внутри routeMiddleware,

'player' => \App\Http\Middleware\RedirectIfNotPlayer::class,

Затем Вы можете использовать свое промежуточное ПОв пути,

Route::get('test2', 'MyController@test2')->middleware('player');
0 голосов
/ 11 февраля 2019

Предлагаю вам поступить так, может быть, это удастся!

public function test()
{
    $cr = ['name' => 'pl', 'password' => 'pl'];

    if (Auth::guard('player')->attempt($cr)) {
        $user = Auth::guard('player')->user();
        return 'ok';
redirect("test2(view)");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...