3 autenticações laravel
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;
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
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á.
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! :-)
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?
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.
Finalizando o ticket
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!