Multi authentication
[Concluído]
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
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']);
}
}
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.
Que bom que conseguiu. Parabéns!
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!