laravel Không tìm thấy mã hóa được hỗ trợ. Mật mã và / hoặc độ dài khóa không hợp lệ


83

Tôi đang xây dựng một dự án bằng Laravel. Nó hoạt động tốt trên localhost, nhưng khi tôi tải nó lên máy chủ (máy chủ đã cài đặt comodo ssl), tôi nhận được lỗi sau:

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

Bất cứ ai có thể giúp giải quyết lỗi này?


Tôi cũng gặp sự cố này ngay bây giờ, tồi tệ nhất stackoverflow.com/questions/37505809/…
udemethegrtman

Câu trả lời:


75

Bạn đã cài đặt tất cả các tiện ích mở rộng cần thiết trên máy chủ chưa?

  • PHP> = 5.5,9
  • OpenSSL PHP Extension
  • Phần mở rộng PDO PHP
  • Phần mở rộng Mbstring PHP
  • Phần mở rộng Tokenizer PHP

Có thể là bạn đang thiếu tiện ích mở rộng OpenSSL. Ngoài ra, bạn có bộ khóa trong .envhồ sơ không?


Thử chạy:

php artisan key:generate


Trả lời: 'cipher' => ''không được thiết lập.


.env giá trị: APP_ENV = APP_DEBUG địa phương = APP_KEY đúng = zK7sr9SzegGEDFClzJDs0vAkpO8NvjZA DB_HOST = localhost DB_DATABASE = homestead DB_USERNAME = homestead DB_PASSWORD = CACHE_DRIVER bí mật = file SESSION_DRIVER = file QUEUE_DRIVER = sync MAIL_DRIVER = smtp MAIL_HOST = mailtrap.io MAIL_PORT = 2525 MAIL_USERNAME = null MAIL_PASSWORD = null MAIL_ENCRYPTION = null
Rahman za

2
Là bạn 'cipher' => 'AES-256-CBC'trongconfig/app.php
Salkz

33
Và chạy php artisan key:generateđể tạo khóa mới.
Salkz,

@Rahmanza Tôi có tất cả các tiện ích mở rộng đó, đã thay đổi loại mật mã của mình và được sử dụng php artisan key:generateđể cố gắng khắc phục sự cố nhưng sự cố vẫn tiếp diễn. Các tuyến đường của tôi có liên quan gì đến điều này không: `` 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

Bạn chỉ gõ vào bảng điều khiển:

php artisan key:generate

Và nếu app.php của bạn không thay đổi Khóa này, hãy thay đổi theo cách thủ công.


Tiếp theo, nếu sau đó bạn sẽ tình cờ nhận được thông báo lỗi này:

[ErrorException]
file_get_contents (/path/to/my/project/.env): không mở được luồng: Không có tệp hoặc thư mục nào như vậy

Sau đó, tạo một bản sao của .env.exampletệp và thử lại:

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

2
Và kiểm tra xem bạn đã cài đặt tất cả các tiện ích mở rộng cần thiết chưa.
Rafael Bugajewski,

2
trước khi sao chép .env.example sang .env
Alex

9

Tôi gặp sự cố tương tự trước đây và tôi đã sửa nó theo cách sau: Đi tới config / app.php, thay đổi "cipher" => "anything"thành

'cipher' => MCRYPT_RIJNDAEL_128,

giá trị mặc định là 'cipher' => 'AES-256-CBC',nhưng giá trị này không nên không có dấu ngoặc kép !! Thật kỳ lạ.
Webinan

Điều đó đã giúp tôi quá, tôi đã không có AES-256-CBCtrong danh sách các thuật toán mã hóa được hỗ trợ như nó bật ra từphpinfo()
Yuriy Dyachkov

8

Tôi đã sửa nó bằng cách chạy cái này:

php artisan config:cache

Trong trường hợp của tôi, tôi đã sử dụng Deployer lần đầu tiên. Khi tôi đang mã hóa dự án vào thư mục / current, tôi gặp lỗi mã hóa. Tạo tệp bộ nhớ cache đã sửa nó.
thomas_inckx

7

Tôi chỉ sửa lỗi.

  1. Shift+Click chuột phải để "mở cửa sổ khen ngợi tại đây" từ dự án gốc của bạn.
  2. Trong giao diện điều khiển ghi: "php artisan key:generate".
  3. Lấy 32 ký tự 'Đánh dấu' để config/app.phpthích 'key' => env('APP_KEY', 'insert get 32 char key'), // dòng số 81

5

Trong trường hợp của tôi, tôi cần bật tiện ích mở rộng mcrypt.

Nhưng trước tiên, hãy kiểm tra xem bạn đã có nó chưa:

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

Kiểm tra xem mô-đun mcrypt đã được tải chưa:

$ php -m | grep mcrypt

Nếu không có gì hiển thị, là do chưa được tải, nhưng bạn đã cài đặt ở trên rồi phải không? Vì vậy, hãy làm điều này:

$ php5enmod mcrypt
$ sudo service apache2 restart

Kiểm tra lại và bạn sẽ thấy mcrypt thay vì không có gì. Đó là một dấu hiệu tốt, hãy tải lại ứng dụng của bạn và đi sửa lỗi tiếp theo của bạn;)

$ php -m | grep mcrypt
mcrypt

5

Trong thư mục gốc, nếu có .env.exampletập tin thì hãy thay đổi nó thành .envrồi chạy php artisan key:generate. Điều này đã làm việc cho tôi.


4

viết trong bảng điều khiển php artisan key:generate

bạn sẽ nhận được thông báo như: Application key [get 32 char key] set successfully.

thay thế khóa ứng dụng trong config/app.phplike'key' => env('APP_KEY', 'insert get 32 char key'),//line number 81


Xin lỗi, tôi đang sử dụng WAMP nhưng tôi không biết config/app.phptệp nằm ở đâu . Bạn có thể cho tôi biết nó?
Julian Moreno

1
đầu tiên, bạn project foldervào wamp servervà sau đó bạn tìm configthư mục rồi bạn sẽ nhận được app.php. cảm ơn bạn
Md Shahadat Hossain

4

được giải quyết bằng:

khóa nghệ nhân php: tạo


3

nếu bạn đang sử dụng tệp cấu hình app.php thay vì đọc khóa từ tệp .env, thì bạn có thể xóa hàm env () trên biến khóa, ví dụ:

'key' = env('someRandom36CharsString'),

đến

'key' = 'someRandom36CharsString',

2

Tôi đã quản lý để giải quyết việc triển khai tới máy chủ Ubuntu trực tiếp, đây là tất cả các bước

Đảm bảo PHP> = 5.5.9

Đảm bảo rằng OpenSSL, Mbstring, Tokenizer và mcrypt đã được cài đặt.

Để cài đặt mcrypt trong PHP (Ubuntu):

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

Đặt thư mục lưu trữ có thể ghi:

chmod -R 0777 storage

Đặt Apache sử dụng thư mục Lavarel / public làm trang chủ:

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

Điều quan trọng đối với tôi là FTP có thể không sao chép các tệp ẩn theo mặc định: .env/public/.htaccesscần phải ở đó!

Sau khi hoàn thành các tác vụ trên, nó đã hoạt động trên máy chủ Ubuntu


1

Tôi đã gặp phải sự cố này trong vài giờ trước khi tôi phát hiện ra rằng khóa đang được lưu vào bộ nhớ cache trong bootstrap \ cache \ config.php. Đã xóa tệp và trang web của tôi tải tốt (nghĩa là không vấn đề gì với cấu hình của tôi).

Tôi phát hiện ra điều này bằng cách thêm một số đầu ra gỡ lỗi vào boostrap \ cache \ compile.php để làm cho nó xuất ra mật mã và khóa (ở đâu đó xung quanh dòng 7010). Sau đó, đào xung quanh để xem cách nó chọn cấu hình và thấy nó sử dụng tệp cấu hình bộ nhớ cache.


1

Hãy đảm bảo rằng bạn có yêu cầu này trong máy của mình.

  1. PHP> = 5.6.4
  2. OpenSSL PHP Extension
  3. Phần mở rộng PDO PHP
  4. Phần mở rộng Mbstring PHP
  5. Phần mở rộng Tokenizer PHP
  6. Phần mở rộng XML PHP

Sau đó, sau khi cài đặt hoặc cập nhật dự án của bạn bằng cách

cập nhật nhà soạn nhạc

Sau đó bạn có--

.env.example

Tạo một bản sao và đổi tên thành--

.env

và thực hiện các thay đổi theo cấu hình cơ sở dữ liệu của bạn hoặc bất kỳ sửa đổi nào khác mà bạn cần.

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

Cuối cùng tạo khóa ứng dụng của bạn bằng cách--

khóa nghệ nhân php: tạo

Đối với Ai đó có thể chỉ bước cuối cùng là đủ. Nhưng tôi gặp vấn đề này mỗi khi tôi sao chép bất kỳ dự án laravel nào. Toàn bộ bước này thực hiện điều này với bất kỳ nguy cơ nào.


0

Thêm "illuminate/html": "~5.0"vào phần yêu cầu của composer.jsontệp của bạn . Chỉ như thế này:

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

Sau đó chạy composer installlệnh. Khi composer installhoàn thành. chạy php artisan key:generate. Bạn sẽ nhận được một thông báo như sau:

Application key [get 32 char key] set successfully.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.