ToDoVel [Parte 18] Autenticação – Migration

Observação: Este tutorial refere-se ao Laravel-4-BETA, estando totalmente DESATUALIZADO para a versão atual. Muita coisa mudou no framework…

Nossa app já está do balacobaco.
Porém, ela só serve se apenas um usuário for utilizá-la, e em localhost.
Se um dia fossemos colocar essa app no ar, ou se fossemos dividí-la com um colega do trabalho, seria legal termos essa app multi-usuário.
Para isso, vamos criar um sistema de autenticação e vamos associar as listas a usuários.
Antes de começar a ficar nervoso lembre-se: estamos utilizando Laravel.

Migrations

Para começar vamos utilizar nossa velha amiga Migration.
Vamos criar uma Migration que crie a tabela de usuários e que associe os usuários as listas.

php artisan migrate:make create_user_table

No nosso novo arquivo, vamos criar os métodos de UP e DOWN:

<?php

use Illuminate\Database\Migrations\Migration;

class CreateUserTable extends Migration {
    
    public function up()
    {
        Schema::create('users', function($table)
        {
            $table->increments('id');
            $table->string('email')->unique();
            $table->string('password');
            $table->timestamps();
        });
        
        
        Schema::table('listas', function($table)
        {
            $table->integer('user_id')->unsigned()->nullable();
            
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
        });
    }
    
    
    public function down()
    {
        Schema::table('listas', function($table){
            $table->dropForeign('user_id');
            $table->dropColumn('user_id');
        });
        
        Schema::dropIfExists('users');
    }

}

E ai é só salvar no banco de dados.

php artisan migrate

Seeder

Agora que criamos a tabela de usuários seria legal termos um usuário cadastrado no banco de dados para podermos testar a vontade.
Porém, inserir esse usuário manualmente vai ser dor de cabeça.
O campo password da tabela deve estar criptografado, e eu acredito que ninguém vai querer ter muita dor de cabeça para criptografar 1 usuário de teste.
Para casos como esse o Laravel possui um Seeder.
O Seeder é uma facilidade para automatizar cadastros em bancos de dados.

Imagine que você tem uma aplicação nova que precisa saber qual é a cidade do usuário.
Ao invés de cadastrar as cidades no banco de dados, você cria um Seeder que faz isso para você.
Assim, se você for colocar sua aplicação em outro servidor, não irá precisar ficar inserindo dados manualmente, e nem executando comandos SQL feito um doido, basta executar o seeder que você criou.

Para utilizar o Seeder precisamos ir no arquivo app/database/seeds/DatabaseSeeder.php:

<?php

class DatabaseSeeder extends Seeder {

	/**
	 * Run the database seeds.
	 *
	 * @return void
	 */
	public function run()
	{
		Eloquent::unguard();

		$this->call('UserTableSeeder');
	}

}

E ai, dentro da pasta app/database/seeds/ a gente cria o arquivo UserTableSeeder.php:

<?php

class UserTableSeeder extends Seeder {

    public function run()
    {
        DB::table('users')->delete();

        User::create(array(
            'email' => 'teste@teste.com',
            'password' => Hash::make('teste')
        ));
    }
}

E ai a gente executa o seguinte comando:

php artisan seed:seed

Chave de Criptografia

No seed fiz uso da facilidade Hash::make(‘string’);.
Ele pega a string e cria um hash.
OOOOOOOOOHHHHHHHHHHHHHHHHHHHHH

No começo do projeto, indiquei que fosse configurado o arquivo app/config/app.php.
Esse arquivo possui a diretiva KEY, que é a chave de criptografia do seu site.
Faça dela uma string longa, bem louca e única!
E nunca fale dela para ninguém!!!
Se faltar criatividade, você pode usar o salt do WordPress: https://api.wordpress.org/secret-key/1.1/salt/.

Dica de leitura: Laravel 4 Uber-Quick-Start (With auth!) Guide

13 thoughts on “ToDoVel [Parte 18] Autenticação – Migration

  1. O comando acho que não deveria ser “php artisan seed:seed” e sim “php artisan bd:seed”

    Aqui tentei assim e funcionou.
    No mais, parabéns.

  2. Uma boa dica para gerar o key é usar o próprio artisan:
    php artisan key:generate

    Se vc nao tiver mexido na configuração o proprio artisan ja configura o arquivo, caso contrario é so copiar a saida do terminal e colocar no script

  3. qual comando se usa quando houver alteração na tabela? Tipo, eu crio a tabela, depois eu coloco mais um campo, como faz para a tabela ser recriada no banco? Mas so a tabela modificada. Quando altero e rodo o camando $ php artisan migrate. Aparece o erro “Nothing to migrate.”

  4. Olá,

    Você saberia me informar como fazer uma autenticação sendo que a senha no banco de dados não usa encriptografia?

    Exemplo:
    Password = 123456

    Senha limpa

    1. A forma mais simples é não utilizar a palavra chave password.
      Se você utilizar como senha, funciona sem criptografia, pois o Laravel vai casar duas colunas sem criptografar nenhuma delas.
      A forma mais complicada é você criar seu próprio sistema de autenticação.

      Por fim, vou ser chato: CRIPTOGRAFE AS SUAS SENHAS!

  5. essa linha de comando

    php artisan seed:seed

    estava dando esse erro
    [InvalidArgumentException]
    There are no commands defined in the “seed” namespace.

    ai fui na documentação de deu certo com

    php artisan db:seed

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *