[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Ricardo Meier
Criador Ricardo Meier 13/04/2020

Meus caros, estou começando a desenvolver minha primeira aplicação em Laravel e me deparei com a necessidade de criar um ambiente separado para o admin e os usuários. Tentei seguir o tutorial de Multi Auth com o Laravel 5.2 (utilizando dois guards diferentes), mas notei várias diferenças com a versão 7. Também cheguei a ver outras soluções, mas nenhuma utilizando o AdminLTE 3, que gostaria de ter em ambos. Até consegui implementar o login em views separadas, mas os links de logout ou redirecionamento acabam sendo os padrões.

Talvez meu pouco conhecimento seja o problema, mas ocorre que a base dessa aplicação é separar esses dois ambientes. Li em outro post aqui uma solução que propõe separar os dois ambientes em aplicações diferentes ou então usar ACL, mas confesso que não gostaria de colocar usuários acessando áreas de administração mesmo que existissem níveis claros de utilização.

Alguma sugestão de solução nesses casos?

Obrigado

Manager Carlos Ferreira 13/04/2020

Olá, Ricardo!
Tudo bem?

Você vai precisar usar guards mesmo.

Primeiro, você pode deixa a autenticação padrão, por default vai usar o guard web, que usa o model User.

Você pode criar outros guards (em config/auth.php), exemplo:
'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],

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

    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],

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

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

    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Models\Admin::class,
    ],
],

Como usar esse guard?
Será necessário usar autenticação manual do Laravel: https://laravel.com/docs/7.x/authentication#authenticating-users

Exemplo:

class LoginAdminController extends Controller
{
    public function authenticate(Request $request)
    {
        $credentials = $request->only('email', 'password');

        if (Auth::guard('admin')->attempt($credentials)) {
            return redirect()->intended('dashboard');
        }

        return redirect()->back()->withErrors(['Dados inválidos']);
    }
}

Carlos Ferreira
Criador Ricardo Meier 13/04/2020

Olá, Carlos, obrigado pela ajuda. Descobri que o Laravel 7 parece que não aceita o formato 'array_get', que troquei por 'Arr::get' e deu certo.

Ricardo Meier
Manager Carlos Ferreira 13/04/2020

Que bom que conseguiu. Parabéns!

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!