Alex
Alex

Reputation: 54

Laravel Auth::guard only working for default

First time i've asked anything on here before and not the most experienced so please be nice!

I have two tables set up in my DB - Users & Agents.

I have tried multiple ways in which to login both of the users and would ideally like them to be able to login from the same form and do a check on both guards to see if the credentials are valid but for some reason when doing doing attempts on the guards it will only work for the table my default is set to in my auth.php file.

Guards I am attempting:

Auth::guard('web')->attempt($credentials)

Auth::guard('agent')->attempt($credentials)

If I set my default guard in my auth.php file to the web guard its works fine and logs in the matching credentials from the Users table but when trying the agents credentials it shows in my network tab:

Login -

POST 302 found

Agent -

GET 302 found

Login -

Get 200 OK

So it's almost like it acknowledges to credentials are correct and re-directs but then doesnt carry on using the selected guard?

LoginController - DoLogin

Auth.php configeration

Upvotes: 0

Views: 1492

Answers (1)

Saurabh Mistry
Saurabh Mistry

Reputation: 13669

in your config/auth.php copy below code :

<?php
return [

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

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

    ],

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

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
        'agents' => [
            'provider' => 'agents',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],
];

in your Login Controller :

 public function login(Request $request)
    {
      $this->validate($request, [
        'email'   => 'required|email',
        'password' => 'required|min:6'
      ]);

      if (Auth::guard('agent')->attempt(['email' => $request->email, 'password' => $request->password])) {
        return redirect('/dashboard/agent');
      }

      if(Auth::guard('web')->attempt(['email' => $request->email, 'password' => $request->password])){
         return redirect('/dashboard/user');
      }

        return redirect()->back()->withInput($request->input());


    }

Upvotes: 0

Related Questions