2
respostas

Auth::attempt não reconhece a credencial

Estou seguindo o curso de API mas não estou fazendo igual ao professor. Estou testando em um projeto diferente por isso meu código mudou um pouco e talvez por isso não esteja funcionando mas não consigo encontrar o que possa ser o erro.

Model User

<?php

namespace App\Models;

// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    public $timestamps = false;
    protected $table = "seg_usuario";
    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'dsc_email',
        'dsc_senha'
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var array<int, string>
     */
    protected $hidden = [
        'dsc_senha'
    ];
}

Rota da API

Route::post('/login', function (Request $request) {
    $credenciais = $request->only(['dsc_email', 'dsc_senha']);
    if (!Auth::attempt($credenciais)) {
        return response()->json('Não autorizado', 401);
    }

    $user = Auth::user();
    $token = $user->createToken('token');

    return response()->json($token->plainTextToken);
});

Chamada no Postman

{
    "dsc_email": "email@exemplo.com.br",
    "dsc_senha": "12345"
}
2 respostas

Oi Anderson

Uma dica: se você é iniciante ou não domina o assunto, siga sempre passos do professor.

Mas vamos lá!

Preciso destacar que a função Auth::attempt é usada para autenticar um usuário com base em credenciais fornecidas, neste caso, um email e senha. Vamos analisar o código que você forneceu e tentar encontrar o possível erro.

  1. Model User

No modelo User que você apresentou, parece estar configurado corretamente. No entanto, é importante garantir que o nome das colunas no banco de dados corresponda aos nomes especificados em $fillable. No seu caso, 'dsc_email' e 'dsc_senha' devem existir na tabela 'seg_usuario'.

  1. Rota da API

A rota para autenticar um usuário parece estar bem definida, mas é importante garantir que você esteja incluindo o namespace correto para a classe Request no início do arquivo. Adicione o seguinte no topo do seu arquivo de rota:

use Illuminate\Http\Request;

Além disso, certifique-se de que você está usando o facade Auth. No início do seu arquivo de rota, inclua o seguinte:

use Illuminate\Support\Facades\Auth;

Dessa forma, você estará acessando o serviço de autenticação do Laravel corretamente.

  1. Chamada no Postman

A requisição feita pelo Postman parece estar correta, fornecendo um email e senha válidos para autenticação.

Agora, vamos analisar possíveis problemas:

  • Namespace: Certifique-se de que a rota onde você está realizando a autenticação esteja no mesmo namespace que o modelo User. Se você estiver usando namespaces diferentes, pode ser necessário importar o modelo User na rota.

  • Middleware: Verifique se o middleware de autenticação está configurado corretamente em suas rotas. Você deve garantir que a rota esteja protegida pelo middleware auth:sanctum. Isso deve ser feito no arquivo routes/api.php.

Route::middleware('auth:sanctum')->group(function () {
    // Suas rotas protegidas vão aqui
});
  • Configuração de Guard: Verifique se o guard usado para autenticação está configurado corretamente em config/auth.php. Certifique-se de que o guard padrão seja configurado para 'sanctum', que é o padrão para autenticação via token.

  • Namespace de Model: Certifique-se de que o namespace do seu modelo User seja o mesmo em todos os lugares onde ele é referenciado.

Agora, com base nessas possíveis áreas de erro, você pode verificar o código e as configurações do seu projeto. Se ainda estiver enfrentando problemas, é útil verificar os logs de erro do Laravel para obter mais informações sobre o que está acontecendo. Isso pode ser feito no arquivo storage/logs/laravel.log.

Obrigado por suas colocações mas na verdade eu que não e fiz entender. Eu já possuo uma tabela de usuário e não quere deixar de usá-la logo, preciso fazer com que ao invés de usar a tabela user, usar a minha tabela. Tenho procurado isso na internet mas até o momento não achei nada que de fato funcionasse.