Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Problema com migration, usuário retorno null ao invés de vazio

Pessoal se alguém puder me ajudar, eu travei bonito nessa parte, já revisei várias vezes a aula mas não tá rolando.

Esses são os fontes que escrevi baseados na aula:

TokenController.php

<?php

namespace App\Http\Controllers;

use App\Models\User;
use Firebase\JWT\JWT;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

class TokenController extends Controller // Extende Controller para ter acesso ao método validate() no $this
{
    public function gerarToken (Request $request)
    {
        // Garante que os dados estão na requisição
        $this->validate($request, [
            'email' => 'required|email',
            'password' => 'required'
        ]);

        // Faz a query e pega o primeiro resultado
        $usuario = User::where(['email', $request->email])->first();

        if (is_null($usuario) || !Hash::check($request->password, $usuario->password)) {
            return response()->json('Usuário ou senha inválidos.', 401);
        }

        $token = JWT::encode(
            ['email' => $request->email],
            env('JWT_KEY')
        );

        return [
            'access_token' => $token
        ];
    }
}

a migration criar_tabela_usuarios

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CriarTabelaUsuarios extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('usuarios', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('email')->unique();
            $table->string('password');

            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('usuarios');
    }
}

A model User.php:

<?php

namespace App\Models;

use Illuminate\Auth\Authenticatable;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Laravel\Lumen\Auth\Authorizable;

class User extends Model implements AuthenticatableContract, AuthorizableContract
{
    use Authenticatable, Authorizable, HasFactory;

    protected $table = 'usuarios';

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

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = [
        'password',
    ];
}
2 respostas

O arquivo de rotas web.php

<?php

use Laravel\Lumen\Routing\Router;

/**
 * @var Router $router
 */
$router->get('/', function () use ($router) {
    return $router->app->version();
});

// Grupo de rotas, todas as rotas aqui dentro começam com o prefixo /api
$router->group(['prefix' => 'api', 'middleware' => 'auth'], function () use ($router) {
    $router->group(['prefix' => 'series'], function () use ($router) {
        $router->post('', 'SeriesController@store');
        $router->get('', 'SeriesController@index');
        $router->get('{id}', 'SeriesController@show');
        $router->put('{id}', 'SeriesController@update');
        $router->delete('{id}', 'SeriesController@destroy');

        $router->get('{serieId}/episodios', 'EpisodiosController@buscaPorSerie');
    });

    $router->group(['prefix' => 'episodios'], function () use ($router) {
        $router->post('', 'EpisodiosController@store');
        $router->get('', 'EpisodiosController@index');
        $router->get('{id}', 'EpisodiosController@show');
        $router->put('{id}', 'EpisodiosController@update');
        $router->delete('{id}', 'EpisodiosController@destroy');
    });
});

$router->post('/api/login', 'TokenController@gerarToken');

Quando dou um dd em $usuarios logo após essa linha no TokenController.php:

$usuario = User::where(['email', $request->email])->first();

Retorna null.

Não consigo encontrar onde foi que eu errei...

Esses são os dados que envio pelo Postman:

{
    "email": "teste@email.com",
    "password": "senha"
}

E essa é a resposta:

"Usuário ou senha inválidos."
solução!

Feito galera descobri o problema!

Erro de sintaxe!

Aqui:

$usuario = User::where(['email', $request->email])->first();

A sintaxe do where é Classe::where(coluna, valorabuscar) e o gênio aqui colocou colchetes em volta kk.

O correto é:

$usuario = User::where('email', $request->email)->first();

Fica a postagem para fins históricos...

É isso ai problema resolvido...até a próxima ratiada pessoal _O/

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software