जब मैं jwt द्वारा एपीआई में लॉगिन करता हूं तो मुझे त्रुटि होती है ..जब मैं अपनी अच्छी इच्छा दर्ज करता हूं लेकिन लॉगिन डिस्प्ले त्रुटि में

InvalidArgumentException: प्रामाणिक गार्ड [ग्राहक] परिभाषित नहीं है। फ़ाइल में C:\Users\Ahmed\Desktop\project web\laravel_pro\vendor\laravel\framework\src\Illuminate\Auth\AuthManager.php लाइन 84 पर

यह नियंत्रक है

public function login(Request $request){
    $credentials = $request->only('email', 'password');

    if (Auth::guard('customer')->attempt($credentials))
    {
       $user= JWTAuth::guard('customer')->user(); 
       $jwt = JwtAuth::generateToken($user);

       return response()->json(compact('jwt'));

    }else{

        return response()->json(['error' => 'invalid_credentials'], 400);
    }

यह एपीआई मार्ग . है

Route::post('login','UserController@login');

यह auth.php . है

 'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],

        'customer'=>[
          'driver' => 'token',
          'provider'=> 'customers',
        ]

    ],

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'customers' => [
            'driver' => 'eloquent',
            'model' => App\Customer::class,
        ],

कृपया कोई भी निकाय मेरे समाधान में मदद करें..धन्यवाद

1
ahmed aljabli 27 फरवरी 2020, 12:23
1
php artisan config:clear या php artisan config:cache चलाने का प्रयास करें
 – 
Sehdev
27 फरवरी 2020, 12:25
मैंने एलो से पहले कोशिश की कि यह काम नहीं कर रहा है क्या आपके पास एक और समाधान है?
 – 
ahmed aljabli
27 फरवरी 2020, 13:17
लेकिन चलाने के बाद php कारीगर कॉन्फिग: कैश .... अपरिभाषित विधि को कॉल करने के लिए त्रुटि परिवर्तन Illuminate\Auth\TokenGuard::attempt()
 – 
ahmed aljabli
27 फरवरी 2020, 13:23
अपने ड्राइवर को token से session 'driver' => 'session', में बदलें उसके बाद फिर से चलाएं php artisan cache:clear php artisan config:cache
 – 
Sehdev
27 फरवरी 2020, 13:26
धन्यवाद, मैंने खोजा और मुझे टोकन से समाधान मिला और सत्र में बदल गया ..लेकिन अब नई त्रुटि प्रदर्शित करें अमान्य_क्रेडेंशियल्स ..... क्या मेरा कोड सही है या गलत ???
 – 
ahmed aljabli
27 फरवरी 2020, 13:36

2 जवाब

पहले अपने गार्ड के driver को token से session में बदलें और फिर निम्न कमांड चलाएँ

php artisan cache:clear
php artisan config:cache
0
Sehdev 27 फरवरी 2020, 13:42
त्रुटि यह ठीक है लेकिन हमेशा मेरी "त्रुटि" दें: "अमान्य_क्रेडेंशियल्स" जब डाकिया में लॉगिन करें ... हालांकि मैं उपयोग कर रहा हूं> हैश :: पासवर्ड के लिए पंजीकरण कब करें
 – 
ahmed aljabli
27 फरवरी 2020, 13:42
Laravel डिफ़ॉल्ट रूप से प्रमाणीकरण के लिए email फ़ील्ड का उपयोग करता है; क्या आपने इसके बजाय उपयोगकर्ता नाम का उपयोग करके प्रमाणित करने के लिए कदम उठाए हैं?
 – 
Sehdev
27 फरवरी 2020, 13:46
मुझे पता है कि लैरावेल डिफ़ॉल्ट रूप से ईमेल का उपयोग करता है और मैं ईमेल का उपयोग कर रहा हूं मैं उपयोगकर्ता नाम का उपयोग नहीं कर रहा हूं
 – 
ahmed aljabli
27 फरवरी 2020, 13:54
 – 
Sehdev
27 फरवरी 2020, 14:02

पहला अनुमान: config/auth.php में आपके वांछित गार्ड के लिए ड्राइवर 'टोकन' के बजाय 'jwt' होना चाहिए, क्योंकि 'टोकन' ड्राइवर एक निश्चित हैश के विरुद्ध काम करता है उपयोगकर्ता तालिका में, jwt के विपरीत जो अस्थिर है और उपयोगकर्ता को समझने के लिए डीबी से पूछताछ नहीं करता है।

दूसरा अनुमान : आप "आंतरिक उपयोगकर्ता" ('एपीआई' गार्ड) और "ग्राहक उपयोगकर्ता" ('ग्राहक' गार्ड का उपयोग करना चाहिए) के लिए एक ही नियंत्रक का उपयोग कर रहे हैं। यह भ्रामक है। आप उपयोगकर्ता प्रकार में कहां भेदभाव कर रहे हैं?

त्रुटि के संबंध में

प्रामाणिक गार्ड [ग्राहक] परिभाषित नहीं है।

जांचें कि यह कोई टाइपो तो नहीं है और आप इसे हमेशा 'ग्राहक' के रूप में संबोधित करते हैं, क्योंकि 'ग्राहकs' गार्ड नहीं बल्कि प्रदाता है। उदाहरण के लिए, जांचें कि क्या रूट मिडलवेयर (उदा. Route::['middleware'=>'auth:customer']


ऐसा कहकर...

मुझे लगता है कि आपने tymondesigns/jwt-auth इंस्टॉल किया है, जिसका कॉन्फ़िगरेशन गाइड उस परिदृश्य की ओर इशारा करता है जहां आप प्रतिस्थापित करते हैं api गार्ड का उपयोग करने के लिए, उस धारणा के तहत, सुनिश्चित करें कि आपने निम्नलिखित संशोधनों को लागू किया है:

  1. अगर Laravel 5.4 या उससे कम का उपयोग कर रहे हैं, तो आपको इन चरणों का पालन करना होगा. नए संस्करण पर वे आपके लिए संभाले जाते हैं ताकि आप इस चरण को छोड़ सकें

  2. जैसा कि मैंने ऊपर कहा, config/auth.php आपके वांछित गार्ड के लिए ड्राइवर को 'टोकन' के बजाय 'jwt' होना चाहिए, क्योंकि 'टोकन' ड्राइवर उपयोगकर्ता तालिका में एक निश्चित हैश के खिलाफ काम करता है, jwt के विपरीत जो अस्थिर है और उपयोगकर्ता का पता लगाने के लिए DB को क्वेरी नहीं करता है।

  3. आपको अपने Customer मॉडल पर JWTSubject इंटरफ़ेस लागू करने की ज़रूरत है (बस चीज़ें जोड़ें, अन्य तरीकों को छूने की ज़रूरत नहीं है)

    Tymon\JWTAuth\Contracts\JWTSubject का उपयोग करें;

    क्लास ग्राहक प्रमाणिक उपकरणों का विस्तार करता है JWTSubject {

    /**
     * Get the identifier that will be stored in the subject claim of the JWT.
     *
     * @return mixed
     */
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }
    
    /**
     * Return a key value array, containing any custom claims 
     * to be added to the JWT.
     *
     * @return array
     */
    public function getJWTCustomClaims()
    { 
        // just an example here, change it to whatever you want
        return [
           'picture' => 'picture', // array values are the fieldname in the DB
           'twitter' => 'twitter_url' 
        ];
    }
    ...
    
  4. आपके नियंत्रक को कंस्ट्रक्टर में संबंधित गार्ड को लागू करना चाहिए, और लॉगिन विधि को श्वेतसूची में डालना क्योंकि आने वाले हेडर में कोई JWT नहीं है।

    // उपयोगकर्ता नियंत्रक सार्वजनिक समारोह __construct () { $यह-> मिडलवेयर ('प्राधिकरण: उपयोगकर्ता', ['छोड़कर' => ['लॉगिन']]); }

    सार्वजनिक समारोह लॉगिन () { $ क्रेडेंशियल = अनुरोध (['ईमेल', 'पासवर्ड']); // टोकन प्रयास से वापस आ गया है अगर (! $ टोकन = प्रमाणीकरण () -> प्रयास ($ क्रेडेंशियल)) { वापसी प्रतिक्रिया () -> जेसन (['त्रुटि' => 'अनधिकृत'], 401); } वापसी प्रतिक्रिया () -> जेसन ([ 'access_token' => $टोकन, 'token_type' => 'वाहक', 'expires_in' => auth()->factory()->getTTL() * 60 ]); } ... अन्य तरीके ...

मैं स्पष्ट को छोड़कर शुरू करूंगा:

  • क्या आप अभी भी उपयोगकर्ता (एपीआई गार्ड) के रूप में लॉगिन करने में सक्षम हैं? यदि आप करते हैं, तो ड्राइवर को 'jwt' में बदलने का प्रयास करें
0
ffflabs 27 फरवरी 2020, 14:00