laravel Nie znaleziono obsługiwanego programu szyfrującego. Szyfr i / lub długość klucza są nieprawidłowe


83

Buduję projekt przy użyciu Laravel. Na localhost działało dobrze, ale kiedy przesyłam go na serwer (na serwerze jest zainstalowany comodo ssl), pojawia się następujący błąd:

RuntimeException in EncryptionServiceProvider.php line 29:
No supported encrypter found. The cipher and / or key length are invalid
in EncryptionServiceProvider.php line 29
at EncryptionServiceProvider->Illuminate\Encryption\{closure}(object(Application), array()) in Container.php line 733
at Container->build(object(Closure), array()) in Container.php line 626
at Container->make('encrypter', array()) in Application.php line 674
at Application->make('Illuminate\Contracts\Encryption\Encrypter') in Container.php line 837
at Container->resolveClass(object(ReflectionParameter)) in Container.php line 800
at Container->getDependencies(array(object(ReflectionParameter)), array()) in Container.php line 771
at Container->build('SahraSalon\Http\Middleware\EncryptCookies', array()) in Container.php line 626
at Container->make('SahraSalon\Http\Middleware\EncryptCookies', array()) in Application.php line 674
at Application->make('SahraSalon\Http\Middleware\EncryptCookies') in Pipeline.php line 123
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Kernel.php line 118
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 86
at Kernel->handle(object(Request)) in index.php line 54

Czy ktoś może pomóc rozwiązać ten błąd?


Ja też mam ten problem teraz, najgorszy stackoverflow.com/questions/37505809/ ...
udemethegrtman

Odpowiedzi:


77

Czy masz zainstalowane wszystkie niezbędne rozszerzenia na serwerze?

  • PHP> = 5.5.9
  • Rozszerzenie OpenSSL PHP
  • Rozszerzenie PDO PHP
  • Rozszerzenie PHP Mbstring
  • Rozszerzenie PHP Tokenizer

Możliwe, że brakuje Ci rozszerzenia OpenSSL. Czy masz ustawiony klucz w .envpliku?


Spróbuj biegać:

php artisan key:generate


Odpowiedź: 'cipher' => ''nie został ustawiony.


.env wartość: APP_ENV = local APP_DEBUG = true APP_KEY = zK7sr9SzegGEDFClzJDs0vAkpO8NvjZA DB_HOST = localhost DB_DATABASE = zagroda DB_USERNAME = zagroda DB_PASSWORD = tajny CACHE_DRIVER = file = plik QUEUE_DRIVER SESSION_DRIVER = sync MAIL_DRIVER = SMTP MAIL_HOST = mailtrap.io MAIL_PORT = 2525 MAIL_USERNAME = null MAIL_PASSWORD = null MAIL_ENCRYPTION = null
Rahman za

2
Czy jesteś 'cipher' => 'AES-256-CBC'wconfig/app.php
Salkz

34
I biegnij, php artisan key:generateaby wygenerować nowy klucz.
Salkz,

@Rahmanza Mam wszystkie te rozszerzenia, zmieniłem typ szyfru i php artisan key:generatepróbowałem naprawić problem, ale nadal występuje. Czy moje trasy mogą mieć z tym coś wspólnego: `` Route :: group (['middleware' => ['web']], function () {Route :: get ('/ login', 'PublicController @ login' ); Route :: post ('/ login', 'AuthenticationController @ login'); Route :: group (['prefix' => 'admin', 'middleware' => 'auth'], function () {route: : get ('dashboard', function () {echo 'in dash';});});}); ``
Tom Bird

95

W konsoli wpisujesz tylko:

php artisan key:generate

A jeśli twój app.php nie zmienia tego klucza, zmień go ręcznie.


Następnie, jeśli powinieneś otrzymać ten komunikat o błędzie:

[ErrorException]
file_get_contents (/path/to/my/project/.env): nie udało się otworzyć strumienia: brak takiego pliku lub katalogu

Następnie wykonaj kopię .env.examplepliku i spróbuj ponownie:

cp .env.example .env
php artisan key:generate

2
I sprawdź, czy masz zainstalowane wszystkie niezbędne rozszerzenia.
Rafael Bugajewski

2
przed skopiowaniem .env.example do .env
Alex

9

Mam ten sam problem wcześniej i naprawiłem go w następujący sposób: Przejdź do config / app.php, zmień "cipher" => "anything"na

'cipher' => MCRYPT_RIJNDAEL_128,

wartość domyślna to, 'cipher' => 'AES-256-CBC',ale powinna być bez cudzysłowu !! Dziwne.
Webinan

To też mi pomogło, nie miałem AES-256-CBCna liście obsługiwanych szyfrów, jak się okazałophpinfo()
Yuriy Dyachkov

8

Naprawiłem to, uruchamiając to:

php artisan config:cache

W moim przypadku pierwszy raz użyłem Deployera. Kiedy łączyłem projekt z folderem / current, wystąpił błąd szyfrowania. Utworzenie pliku pamięci podręcznej naprawiło to.
thomas_inckx

7

Po prostu naprawiam błąd.

  1. Shift+Click prawym przyciskiem myszy, aby „otworzyć tutaj okno poleceń” z projektu głównego.
  2. W zapisie konsoli: "php artisan key:generate".
  3. Uzyskaj 32-znakowy znak „Mark” do config/app.phppolubienia 'key' => env('APP_KEY', 'insert get 32 char key')// linia numer 81

5

W moim przypadku muszę włączyć rozszerzenie mcrypt.

Ale najpierw sprawdź, czy już go masz:

$ sudo apt-get install -y mcrypt php5-mcrypt

Sprawdź, czy moduł mcrypt jest załadowany:

$ php -m | grep mcrypt

jeśli nic się nie wyświetla, to dlatego, że nie jest załadowany, ale masz już zainstalowany powyżej, prawda? Więc zrób to:

$ php5enmod mcrypt
$ sudo service apache2 restart

Sprawdź ponownie, a zamiast niczego powinieneś zobaczyć mcrypt. To dobry znak, załaduj ponownie aplikację i napraw następny błąd;)

$ php -m | grep mcrypt
mcrypt

5

W katalogu głównym, jeśli istnieje .env.exampleplik, zmień go na, .enva następnie uruchom php artisan key:generate. To zadziałało dla mnie.


4

napisz w konsoli php artisan key:generate

otrzymasz wiadomość taką jak: Application key [get 32 char key] set successfully.

zamień klucz aplikacji na config/app.phppodobny'key' => env('APP_KEY', 'insert get 32 char key'),//line number 81


Przepraszam, używam WAMP, ale nie wiem, gdzie znajduje się config/app.phpplik. Czy możesz mi to powiedzieć?
Julian Moreno

1
najpierw udać ci project foldersię wamp server, a następnie znaleźć configfolder, a następnie dostaniesz app.php. dziękuję
Md Shahadat Hossain


3

jeśli używasz pliku konfiguracyjnego app.php zamiast czytać klucz z pliku .env, możesz usunąć funkcję env () ze zmiennej klucza, np .:

'key' = env('someRandom36CharsString'),

do

'key' = 'someRandom36CharsString',

2

Udało mi się rozwiązać wdrożenie na serwer Ubuntu na żywo, oto wszystkie kroki

Upewnij się, że PHP> = 5.5.9

Upewnij się, że zainstalowano OpenSSL, Mbstring, Tokenizer i mcrypt.

Aby zainstalować mcrypt w PHP (Ubuntu):

sudo apt-get install php5-mcrypt,
sudo php5enmod mcrypt

Udostępnij folder pamięci do zapisu:

chmod -R 0777 storage

Spraw, aby Apache używał folderu Lavarel / public jako katalogu domowego:

DocumentRoot /home/code2/public_html/Laravel-Project/public
    <Directory "/home/code2/public_html/Laravel-Project/public”> 
         AllowOverride all 
    </Directory>

Najważniejsze dla mnie jest to, że FTP może domyślnie nie kopiować ukrytych plików: .envi/public/.htaccess musi tam być!

Po wykonaniu powyższych zadań działał na serwerze Ubuntu


1

Cierpiałem z tym problemem przez kilka godzin za dużo, zanim odkryłem, że klucz był buforowany w pliku bootstrap \ cache \ config.php. Usunąłem plik, a moja witryna została załadowana poprawnie (tj. W przeciwnym razie nie było problem z moim config).

Odkryłem to, dodając dane wyjściowe debugowania do pliku boostrap \ cache \ compiled.php, aby wypluł szyfr i klucz (gdzieś w okolicach linii 7010). Następnie rozejrzał się, aby zobaczyć, jak zbierał konfigurację i odkrył, że używa pliku konfiguracyjnego pamięci podręcznej.


1

Upewnij się, że masz te wymagania w swojej maszynie.

  1. PHP> = 5.6.4
  2. Rozszerzenie OpenSSL PHP
  3. Rozszerzenie PDO PHP
  4. Rozszerzenie PHP Mbstring
  5. Rozszerzenie PHP Tokenizer
  6. Rozszerzenie XML PHP

Następnie po zainstalowaniu lub zaktualizowaniu projektu przez

aktualizacja kompozytora

Po tym masz ...

.env.example

Utwórz duplikat i zmień jego nazwę na ...

.env

i wprowadź zmiany zgodnie z konfiguracją bazy danych lub innymi potrzebnymi modyfikacjami.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your db name
DB_USERNAME=username if any otherwise root
DB_PASSWORD= your password if not set leave blank

Na koniec wygeneruj klucz aplikacji przez:

klucz php artisan: generuj

Dla Kogoś może wystarczy tylko ostatni krok. Ale mam ten problem za każdym razem, gdy klonuję jakikolwiek projekt laravel. Cały ten krok sprawia, że ​​jest to niebezpieczne.


0

Dodaj "illuminate/html": "~5.0"do wymaganej sekcji composer.jsonpliku. Takie jak to:

...
"require": {
    ...
    "illuminate/html": "~5.0"
    ...
},
...

Następnie uruchom composer installpolecenie. Gdycomposer install się skończy. biegać php artisan key:generate. Otrzymasz taką wiadomość:

Application key [get 32 char key] set successfully.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.