Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

The server requested authentication method unknown to the client

Não sei como se resolve isso. Eu consigo conectar normalmente com o banco de dados pelo cmd e ver os produtos. Mas ao colocar as informações para exibir na minha controller, aparece essa mensagem.

Minha controller está assim:

<?php namespace estoque\Http\Controllers;

use DB;

class ProdutoController extends Controller {

    public function lista(){

        $html = '<h1>Listagem de produtos com Laravel</h1>';

        $html .= '<ul>';

        $produtos = DB::select('select * from produtos');

        foreach ($produtos as $p) {
            $html .= '<li> Nome: '. $p->nome .', Descrição: '. $p->descricao .'</li>';
        }

        $html .= '</ul>';

        return $html;
    }
}

E minha configuração de database dentro do config está assim:

'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'database' => env('DB_DATABASE', 'estoque_laravel'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', '[senha]'),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

Já procurei em vários lugares, mas nada que solucionasse meu problema. Alguém já passou por isso e sabe como resolver?

1 resposta
solução

Oi Felipe, tudo bom?

Qual versão do Mysql você está utilizando?

Dei uma pesquisada no seu erro e esse é bem recorrente por incompatibilidade do Mysql. Os casos que mais aparecem são da versão acima da 5.7

Entretanto, o problema é relacionado ao método de autenticacao. Quando você acessa pelo terminal você acessa root sem senha? Esse é um padrão que caiu como má prática a partir da versao 5.6 do mysql. Utilizar o root para conexões externas (como a que o laravel faz) também.

Uma possivel solução é criar um usuário especifico no mysql. Acessando pelo terminal com os comandos:

CREATE USER 'seuUsuario'@'localhost' IDENTIFIED WITH mysql_native_password BY 'suaSenha';
GRANT ALL PRIVILEGES ON . TO 'seuUsuario'@'localhost' WITH GRANT OPTION;

Abraço