Mysql
 sql >> Database >  >> RDS >> Mysql

lavaral 5 ERROR{ (SQLSTATE[HY000] [1045] Accesso negato per l'utente 'root'@'localhost' (usando la password:YES)}

Per impostazione predefinita, laravel presume che tu voglia avere configurazioni diverse per ambienti diversi. Per esempio. in un ambiente di test, potresti voler avere un nome utente e una password diversi e in un ambiente di produzione diverso. Dato che laravel ha così tanti file di configurazione, diventa rapidamente un incubo gestirli tutti. Quindi laravel fa uso delle variabili d'ambiente di PHP.

Consulta i documenti qui.

Ciò che in pratica si dice è che se desideri utilizzare le variabili "ambiente", che laravel usa per impostazione predefinita, devi posizionare tutte le tue configurazioni in env() metodo come già accennato.

Se non si desidera farlo, ad es. per progetti semplici, rimuovi semplicemente l'env dal tuo codice, in questo modo.

'mysql' => [
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'laravel',
        'username'  => 'root',
        'password'  => 'password',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],

Nota che puoi mescolare e abbinare. cioè puoi avere alcune delle variabili in env e alcune autonome.

Allora perché usare env per niente?

Supponiamo che la tua applicazione abbia 100 tester tutti posizionati in posizioni diverse. In laravel devi codificare circa 8-10 file di configurazione. Inoltre devi version-control quei file. Quindi hai due problemi a portata di mano:

  1. Non desideri inviare a tutti i 100 utenti le stesse credenziali. Inoltre potrebbero utilizzare diversi database, server cache, ecc. Il che significa che avranno configurazioni diverse. Quindi ogni utente deve mantenere manualmente quegli 8-10 file di configurazione.
  2. Non desideri inviare questi file di configurazione al controllo della versione. Perché se lo fai, il mondo intero conoscerà i tuoi segreti API e forse ne trarrà vantaggio (proprio come la password). Inoltre, se guardi i file conf di laravel, noterai che ci sono altre informazioni come fuso orario, proprietà di debug, ecc. Che sono anche nei file conf e vuoi controllarli. Quindi, come puoi controllare la versione di tali file di configurazione e nascondere comunque le tue informazioni riservate.

La risposta è env variabili. Laravel usa dotenv la cui documentazione può essere trovata qui . Fondamentalmente queste sono variabili che risiedono in un file chiamato .env in una coppia chiave-valore. Es.

Contenuto di esempio del file .env

APP_DEBUG=false
APP_KEY=ABCDEFGH
...

Dopo aver definito il tuo file .env come questo, puoi ottenere il valore usando la chiave in quanto tale env('APP_DEBUG') .

Quindi questo risolve il problema sopra menzionato nei seguenti modi:

  1. conservi il .env file a te stesso. E dichiari anche un altro file chiamato .env.example che è una replica esatta del file originale tranne per il fatto che contiene valori di esempio, non i tuoi valori sensibili. Quindi passi questo nuovo file di esempio a tutti. Sostituiranno i dati di esempio con le proprie informazioni sensibili.
  2. Dato che stai controllando la versione del file di esempio, puoi controllare la versione di tutti i tuoi file conf perché non contengono il segreto. Il segreto è nei file .env. Tutti quei file di configurazione contengono valori come questi env('APP_KEY') e il valore effettivo viene sostituito in fase di esecuzione utilizzando il file .env.