اذهب إلى المحتوى

السؤال

نشر

عند تسجيل الدخول إلى التطبيق وفك تشفير كلمة المرور يظهر لدي الخطأ التالي:

The payload is invalid.
#0 /home/improojf/public_html/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php(136): Illuminate\Encryption\Encrypter->getJsonPayload(NULL)
#1 /home/improojf/public_html/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php(164): Illuminate\Encryption\Encrypter->decrypt('eyJpdiI6InloT0U...', false)
#2 /home/improojf/public_html/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(261): Illuminate\Encryption\Encrypter->decryptString('eyJpdiI6InloT0U...')
#3 /home/improojf/public_html/app/Models/Server.php(29): Illuminate\Support\Facades\Facade::__callStatic('decryptString', Array)
#4 /home/improojf/public_html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(473): Server->getPasswordAttribute('eyJpdiI6InloT0U...')

مع العلم أن هذه المشكلة تحدث فقط لعدد محدد من المستخدمين، أما بقية المستخدمين فلا تظهر أي رسالة خطأ عند فك تشفير كلمة المرور.

كيف أستطيع حل هذه المشكلة؟

Recommended Posts

  • 1
نشر

وفقاً للتوثيق الرسمي في لارافل، إن جميع القيم المشفرة في لارافل يتم تشفيرها من خلال مايعرف بـ MAC - message authentication code. ولذلك لا يمكن تغيير التشفير لقيمة تم تشفيرها مسبقاً من خلال مشروع آخر.

أي بمعنى آخر، قد تحدث المشكلة نتيجة لتغيير المفتاح في المشروع، ويتم ذلك عادة عند نقل المشاريع أو نسخ الأكواد بين مشروع وآخر، وبالتالي يتغيّر App Key في مشروع لارافيل وعند التعامل مع البيانات المخزّنة مسبقاً في قاعدة البيانات والتي تم تشفيرها من خلال مشروع آخر تحدث هذه المشكلة لأنه لا يمكن لقيمة App key الجديدة من فك تشفير البيانات السابقة والتي تم حفظها بشكل مشفّر مسبقاً من خلال المفتاح السابق.

مما قد يؤدي أيضاً في حالتك لتشفير بعض البيانات في القاعدة بمفتاح وبيانات أخرى بمفتاح آخر وهي التي في حالتك تظهر فيها هذه المشكلة عدى عن الأخرى.

لذلك يجب التأكد من قيمة App Key عند نقل المشاريع التي يتم التعامل فيها مع نفس البيانات على خوادم قواعد البيانات.

ومن إحدى المشاكل التي قد تطرأ أيضاً اختلاف أنماط تخزين كلمة المرور بين قاعدة بيانات وأخرى بين نسخ لارافل من النمط varchar(191) والتي بدورها لا تستطيع تخزين كامل القيمة المشفرة لكلمة المرور بل يتم تخزين جزء منها فقط. لذلك ينصح أيضاً عند التعامل مع مشاريع مختلفة أو نسخ مختلفة تحويل حقل كلمة المرور إلى النمط longtext أو text وخاصةً عندما تكون كلمات المرور غير محددة الطول.

 

  • 0
نشر

يحدث المشكل أحيانا بسبب محاولة فك تشفير نص إما غير مشفر من الأساس أو قد فك تشفيره قبل ذلك . 

مثال : 

إن كنت تستخدم مسترجع أو معدل Mutator على خاصية كلمة المرور في ملف النموذج : 

public function getPasswordAttribute($value) {
    return Crypt::decryptString($value);
}

ثم تقوم بقراءتها على هذا النحو :

$pass = Crypt::decryptString($user->password);

سيؤدي هذا إلى ظهور المشكل لأننا نحاول فك التشفير مرتين , و بالتالي و لحل المشكل تأكد أنك لا تقوم بذلك أو بأي عملية بنفس المنطق . 

إن لم يحل هذا مشكلتك يرجى إرفاق الكود المسبب للمشكلة حتى يتم النظر فيه بشكل أكثر دقة .

يمكنك القراءة عن إرشادات طرح الأسئلة .

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...