0
votes

I'm learning how to create custom auth system. I created own guard Player. On my test function I'm usimg attempt() to authenticate user. Checking is passed. Then I created test2 method which is accesible only for logged user.

My Route is:

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

My Controller is:

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';
    }
}

My guard config is:

'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,
        ],
    ],

I want to get access to test2 route by hand (not by redirecting) after performing test function but I can't. I'm receiving Auth default login form.

Should I write my own middleware or set session manually? Please help.

2
can you post the 'player' guard config ?paris93

2 Answers

0
votes

I suggest you to do like this may be this work out!

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

    if (Auth::guard('player')->attempt($cr)) {
        $user = Auth::guard('player')->user();
        return 'ok';
redirect("test2(view)");
    }
0
votes

You need to write you own middleware,

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

    }
}

add this middleware to your kernel.php file, inside routeMiddleware,

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

Then You can use your middleware in route,

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