Agência Wys
Criador Agência Wys 23/08/2017
Em nosso site, teremos 3 autenticações:
 
- ADMIN (está usando a autenticação padrão do Laravel)
 
- VIAJANTE
 
- ANUNCIANTE)
 
Preciso duplicar a autenticação padrão do Laravel 5.4 para fazer nos outros 2 painel, pois muito das coisas que eu encontro na internet não bate com o problema atual do site.
 
Acredito que seja algo simples, mas não estou conseguindo por em prática.
Manager Carlos Ferreira 23/08/2017

Olá, tudo bem?

 

A partir da versão 5.2 do laravel foi implementado nativamente um recurso para trabalhar com mult-auth nativamente.

É possível definir quantos guard for preciso para implementar uma autenticação múltipla.

A autenticação padrão do laravel utiliza o guard web, no arquivo de configuração de autenticação /config/auth.php é possível definir quantos guards precisar, basta criar desta forma:

'guards' => [

    //Este é o guard padrão do laravel

    'web' => [

        'driver' => 'session',

        'provider' => 'users',

    ],

 

    //Nosso guard personalizado

    'other-guard' => [

        'driver' => 'session',

        'provider' => 'other',//Precisa informar o nome do provider

    ],

 

    'api' => [

        'driver' => 'token',

        'provider' => 'users',

    ],

],

 

Agora ainda no arquivo /config/auth.php precisa informar os dados do provider, algo assim:

'providers' => [

    //Provider Padrão

    'users' => [

        'driver' => 'eloquent',

        'model' => App\User::class,

    ],

 

    //Nosso provider personalizado

    'other' => [

        'driver' => 'eloquent',//método de autenticação

        'model' => App\NameOtherModel::class,//Model da tabela que tem os dados do usuário que irá acessar

    ],

],

 

Para conseguir resetar a senha do novo guard precisa informar também, desta forma:

'passwords' => [

    'users' => [

        'provider' => 'users',

        'table' => 'password_resets',

        'expire' => 60,

    ],

 

    'other' => [

        'provider' => 'other',

        'table' => 'password_resets',

        'expire' => 60,

    ],

],

 

 

 

Agora para autenticar utilizando este novo guard que criamos basta utilizar a autenticação manual informando o valor do guard que criamos, algo mais ou menos assim:

public function login(Request $request)

{

    //Validações...

    

    if (Auth::guard('other-guard')->attempt(['email' => $request->email, 'password' => $request->password])) {

        //success

    }

 

    return redirect()->back()->withErrors(['Login inválido!']);

}

 

Se quiser se aprofundar mais no assunto, tenho essa aula sobre o tema: http://www.especializati.com.br/tutorial/multipla-autenticao-laravel-5

 

Qualquer dúvida continuo à disposição. Basta retornar o chamado! :-)

 

Abs;

Carlos Ferreira
Manager Carlos Ferreira 23/08/2017

Se quiser trabalhar com níveis de acesso, recomendo trabalhar com o recurso nativo do laravel de Authorization.

Tenho um curso 100% gratuito sobre este tema, dá uma olhada: http://www.especializati.com.br/categoria/curso-laravel-acl

Se quiser um curso mais completo e atualizado sobre o assunto, dá uma olhada: http://www.especializati.com.br/curso-laravel-blog-acl

Carlos Ferreira
Criador Agência Wys 23/08/2017

Olá,

Realizei todas as etapas para criação de uma multipla autenticação, mas mesmo assim não funcionou.

Criei um novo guard, um novo providers. Criei o MODEL Admin. Chamei da mesma forma como você informou acima (Auth::guard('admin')).

Mas não funcionou!

Por que será?

 

Obrigado desde já.

Agência Wys
Manager Carlos Ferreira 23/08/2017

Olá,

Está gerando algum erro? Ou simplesmente não loga?

Sua Model Admin deve ficar mais ou menos assim:
<?php
namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class Admin extends Authenticatable
{
    use Notifiable;

    protected $guard = 'admin';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}



Após criar as configurações do guard no arquivo /config/auth.php a verificação deve ficar assim:
if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password])) {
    //Sucesso!
}

Faz o teste e me retorna por favor! :-)

Carlos Ferreira
Criador Agência Wys 23/08/2017

Olá, o meu model ADMIN está desta forma, mas mesmo assim não funciona.

 

Abaixo como estão os meus guards e providers:

'guards' => [

        'web' => [

            'driver' => 'session',

            'provider' => 'users',

        ],

 

        'api' => [

            'driver' => 'token',

            'provider' => 'users',

        ],

        

        'admin' => [

            'driver' => 'session',

            'provider' => 'admins',

        ],

    ],

 

 'providers' => [

        'users' => [

            'driver' => 'eloquent',

            'model' => App\User::class,

        ],

        'admins' => [

            'driver' => 'eloquent',

            'model' => App\Admin::class,

        ],

 

    ],

 

Abaixo está a função que faz o login:

 

    public function doLogin(Request $request)

    {

        #rember aways true

        $remember = false;

 

 

        if (Auth::guard('admin')->attempt(array(

            'email' => $request->input('email'),

            'password' => $request->input('password')

        ), $remember)

        ) {

            return response()->json(['success' => true, 'error' => false]);

        } else {

            return response()->json(['success' => false, 'error' => 'Login inválido, tente novamente.']);

        }

    }

 

E o formúlário retorna apenas: "Login inválido, tente novamente."

 

Por que será que isso acontece?

 

 

 

Agência Wys
Manager Carlos Ferreira 23/08/2017

Olá, tudo bem?

Acredito que para o cenário que está trabalhando precisa de uma múltipla autenticação personalizada.

Acabei de criar algo personalizado para você e subir para o meu GitHub, veja: https://github.com/carlosfgti/laravel55-mult-auth-custom

Neste cenário tanto os usuários da tabela admins, quanto da tabela users podem acessar o mesmo ambiente.

Carlos Ferreira
Manager Carlos Ferreira 23/08/2017

Finalizando o ticket

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

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!