Neste post vou demostrar como realizar o login por username / e-mail e traduzir os arquivos de autenticação do Laravel.
1º Passo:
Criar a migration para inserir o campo username na tabela users.
Abra o terminal do Visual Code Studio e execute o comando
php artisan make:migration add_username_users_table
O Comando acima vai criar a migration na pasta datababe/migrations, abra a pasta e selecione o arquivo criado, se preferir use a busca do Visual Code Studio Ctrl+P e pesquise por add que deve encontrar o arquivo criado.
Na função up, são realizadas as ações do comando php artisan migrate, como queremos atualizar uma tabela existente usamos o código abaixo:
Schema::table('users', function (Blueprint $table) {
$table->string('username')->after('name');
});
Esse código adiciona o campo 'username', após o campo 'name' na tabela users.
Na função down são executados as rotinas do comando php artisan migrate:rollback, entre outros, ou seja, ele remove os campos ou tabelas criadas. Vamos inserir o código
$table->dropColumn('username');
Essa linha irá remover o campo 'username' da tabela.
Portanto o código deve ficar assim:

Código completo:
https://github.com/Meirimbr/curso_laravel/blob/master/3/add_username_users_table.php
Agora executamos a migration com o comando
php artisan migrate

Com isso, temos o campo username em nossa tabela users, que pode ser verificado no phpMyAdmin

Nesse momento você tentar criar um novo usuário no sistema irá gerar erro, pois vai acusar que o campo username não pode ser nulo. Então vamos mudar o model, controller e view para adicionar o username.
2º Passo
Modificando os parâmetros para inserir o username na autenticação.
Model
Abra a model User.php e coloque o 'username' no array $fillable. O Laravel por padrão restringe a modificação de arquivos em massa, então colocamos os campos que vão ser modificamos pelo controller dentro do array. Insira o 'username' no array, devendo ficar assim:

Código completo:
https://github.com/Meirimbr/curso_laravel/blob/master/3/User.php
O array $hidden, deixa oculto as variáveis no navegador, sempre que não quiser exibir a variável no inspecionar coloque neste campo.
Controller
Abra o arquivo app/Http/Controllers/Auth/LoginController.php e modifique o arquivo. Primeiro vamos colocar o que será usado no controller, pode colocar após a linha 6
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
Agora após a função __construct vamos adicionar a função username, que vai requisitar o username ou email do usuário.
//Funcao que requisita username ou email do usuario
public function username()
{
$identidade = request()->get('identidade');
$input = filter_var($identidade, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
request()->merge([$input => $identidade]);
return $input;
}
Agora vamos colocar as funções de validação de erro, cole o código abaixo da função username.
//Validacao do formulario
protected function validateLogin(Request $request)
{
$this->validate(
$request,
[
'identidade' => 'required|string',
'password' => 'required|string',
]
);
}
//Funcao de erro
function sendFailedLoginResponse(Request $request)
{
$request->session()->put('login_error', trans('auth.failed'));
throw ValidationException::withMessages(
[
'error' => [trans('auth.failed')],
]
);
}
Arrume a indentação na hora de colocar o código com tab e shift+tab. Portanto o restante do código deve estar assim: (Pode remover os comentários desnecessários)
Código completo:
https://github.com/Meirimbr/curso_laravel/blob/master/3/LoginController.php
Agora vamos modificar o arquivo
app/Http/Controllers/Auth/RegisterController.php
Basicamente as mesmas modificações, apenas acrescentando o 'username' na validação e inputs para criar o novo registro. E na validação sempre coloque o limite máximo de caracteres em 191 ou algum outro que preferir dependendo do tamanho do campo, assim você evita que cabe estourando o limite por descuido.
Código completo:
https://github.com/Meirimbr/curso_laravel/blob/master/3/RegisterController.php
View
Agora para a aplicação ficar 100%, falta o ajuste nas View da pasta Auth. Abra o arquivo
resources/view/auth/login.blade.php
Nesse arquivo fiz as modificações de html necessários para o funcionamento, juntamente com a tradução, segue o código modificado:
https://github.com/Meirimbr/curso_laravel/blob/master/3/login.blade.php
Em seguida abra o arquivo
resources/view/auth/register.blade.php
que também contém as modificações básicas para o funcionamento.
Código completo:
https://github.com/Meirimbr/curso_laravel/blob/master/3/register.blade.php
Agora os arquivos de passwords
resources/view/auth/passwords/email.blade.php
Esse arquivo é o responsável pelo reset do password, quando clica o botão esqueci minha senha.
Código completo:
https://github.com/Meirimbr/curso_laravel/blob/master/3/email.blade.php
E por último o arquivo
resources/view/auth/passwords/reset.blade.php
Esse é o arquivo cujo o link é enviado por email para resetar a senha e validar a nova senha.
Código completo:
https://github.com/Meirimbr/curso_laravel/blob/master/3/reset.blade.php
Pronto, agora é só testar as validações e registro de novos usuários.
[ ]'s