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

السؤال

نشر

أحاول تسجيل الدخول من تطبيق موبايل من خلال استخدام passport في لارافل. عن طريق استخدام آلية Password Grand Tokens ولكن مهما قمت بتغيير معلومات الدخول أحصل على الخطأ التالي لجميع المستخدمين:

{"error":"invalid_client","message":"Client authentication failed"}

وهذه هي البيانات التي أقوم بتمريرها في postman:

{
    "grant_type": "password,"
    "client_id": "1,"
    "client_secret": "FEERJFSDIRKKBBNVOUTKfdm49f,"
    "username": "test@test.com,"
    "password": "test,"
    "scope": ""
}

ولكن عندما احاول الحصول على المعلومات من الموقع نفسه مثلاً api/user مع إضافة الترويسة Authorization والتوثيق Bearer token أستطيع الحصول على البيانات دون مشاكل.

كيف يمكنني حل هذه المشكلة؟

Recommended Posts

  • 0
نشر

يمكنك تنفيذ الأمر التالي 

php artisan config:clear

و ايضا الأمر التالي 

php artisan cache:clear

ثم تأكد بأنك أنشأت passport keys عن طريق الأمر التالي 

php artisan passport:install

ثم تأكد من أنشاء client_id, client_secret باستخدام الأمر التالي 

php artisan passport:client

ثم تأكد من إضافة HasApiTokens إلى ملف User.php بهذا الشكل 

use HasApiTokens;

و لا تنسى إضافة 

use Laravel\Passport\HasApiTokens;

إعلى الكلاس 

  • 1
نشر

تحقّق من أن المودل الخاص بجدول المستخدم والذي يقوم باستخدام \Laravel\Passport\HasApiTokens يحوي على خانة البريد الالكتروني email، لأن البريد الالكتروني هو الافتراضي الذي يتم استخدامه أثناء عملية التحقق والتوثيق.

ففي حال كان الجدول لديك يحوي اسم مستخدم username أو أي خانة أخرى يتم استخدامها بدلاً من البريد الالكتروني في عملية التوثيق يجب عليك استخدام التابع findForPassport في هذا المودل كالتالي:

public function findForPassport($username) {
       return self::where('username', $username)->first(); أو أي خانة يتم استخدامها في عملية التوثيق
    }

ومن ثم يمكنك استخدام getAuthIdentifier وكتابة التابع الخاص بمتحكّم التوثيق على الشكل التالي:

public function getUserEntityByUserCredentials($username, $password, $grantType, ClientEntityInterface $clientEntity)
    {
        if (is_null($model = config('auth.providers.users.model'))) {
            throw new RuntimeException('cant reach user model');
        }

        if (method_exists($model, 'findForPassport')) {
            $user = (new $model)->findForPassport($username); //أو الخانة التي يتم استخدامها في التوثيق
        } else {
            $user = (new $model)->where('email', $username)->first();
        }

        if (! $user || ! $this->hasher->check($password, $user->password)) {
            return;
        }

        return new User($user->getAuthIdentifier());
    }

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...