2016-08-30 14 views
10

मुझे आशा है कि कोई यह समझा सकता है कि मैं unauthenticated क्यों हूं जब पहले से ही एक सफल Oauth 2 प्रमाणीकरण प्रक्रिया निष्पादित की गई है।पासपोर्ट - "अनधिकृत।" - लार्वेल 5.3

मैंने Passport पैकेज को लैरावेल के दस्तावेज़ों में स्थापित किया है और मुझे सफलतापूर्वक प्रमाणित किया जाता है, टोकन मान प्राप्त होता है और इसी तरह। लेकिन, जब मैं get अनुरोध करने का प्रयास करता हूं, तो कहें, /api/user, मुझे प्रतिक्रिया के रूप में Unauthenticated त्रुटि मिलती है। मैं मुख्य नाम Authorization के साथ हेडर के रूप में टोकन मान का उपयोग करता हूं, जैसा कि दस्तावेज़ों में वर्णित है।

Route::get('/user', function (Request $request) { 
    return $request->user(); 
})->middleware("auth:api"); 

इस समारोह प्रमाणीकृत उपयोगकर्ता के रूप में अपने स्वयं वापस देने के लिए लगता है, लेकिन मैं केवल Unauthenticated हो रही है। इसी तरह, अगर मैं पहले उपयोगकर्ता को वापस लौटाता हूं, तो मुझे फिर से Unauthenticated मिल रहा है।

Route::get('/test', function(Request $request) { 
    return App\User::whereId(1)->first(); 
})->middleware("auth:api"); 

एक ट्यूटोरियल में Laracast से, Passport की स्थापना के माध्यम से मार्गदर्शन, guider उसके मार्गों में ->middleware("auth:api") नहीं है। लेकिन अगर यह वहां नहीं है, तो फिर प्रमाणीकरण की कोई ज़रूरत नहीं है!

कृपया, कोई सुझाव या उत्तर अधिक स्वागत है!

+0

शायद तुम यदि आप "वाहक " प्राधिकरण हैडर – Urizev

+0

इम में भी हो रही है नहीं "अनधिकृत" मैं तुरंत प्रवेश पृष्ठ पर रीडायरेक्ट भेज रहे हैं की जाँच कर सकते हैं। –

+0

आपके 'मार्ग \ api.php' फ़ाइल के अंदर लिखने वाले सभी' मार्ग '** ** डिफ़ॉल्ट ** ** एपीआई मिडलवेयर ** से सुरक्षित हैं। तो, आप '-> मिडलवेयर ("auth: api") के अपने स्पष्ट उल्लेख को हटा सकते हैं। –

उत्तर

0

मुझे बिल्कुल वही त्रुटि थी क्योंकि मैं प्रोजेक्ट नाम से पहले http डालना भूल गया था।

http missing

+2

कृपया –

3

आप टोकन आप पैदा कर रहे हैं के लिए एक समाप्ति तिथि सेट,

सेट अपने AuthServiceProvider में बूट विधि नीचे कोड की तरह कुछ करने के लिए और एक नया टोकन बनाने की कोशिश करने के लिए है। पासपोर्ट डिफ़ॉल्ट समाप्ति ऋणात्मक संख्या रिटर्न

public function boot() 
{ 
    $this->registerPolicies(); 
    Passport::routes(); 
    Passport::tokensExpireIn(Carbon::now()->addDays(15)); 
    Passport::refreshTokensExpireIn(Carbon::now()->addDays(30)); 
} 
+0

की तरह कोड कॉपी करें और छवि नहीं, 'डिफ़ॉल्ट रूप से, पासपोर्ट लंबे समय तक पहुंचने वाले टोकन जारी करता है जिन्हें कभी भी ताज़ा करने की आवश्यकता नहीं होती है।' - https://laravel.com/docs/5.4/passport#configuration – adamj

1

, अपने उपयोगकर्ता मॉडल और डेटाबेस तालिका देखें कि क्या आप प्राथमिक आईडी फ़ील्ड नाम "आईडी" के अलावा कुछ या यहाँ तक कि कहने के लिए "user_id" आपको समस्या आ जाती सकता है बदलाव कर दिया है । मैंने अपने उपयोगकर्ता मॉडल और डेटाबेस तालिका में प्राथमिक आईडी फ़ील्ड को संशोधित करने के संबंध में एक समस्या को डीबग किया है, इसे "id" के रूप में रखने के बजाय "acct_id" कहने के लिए और परिणाम "अनधिकृत" था जब मैंने उपयोगकर्ता ऑब्जेक्ट को GET/user के माध्यम से प्राप्त करने का प्रयास किया एथ के माध्यम से: एपीआई मिडलवेयर। ध्यान रखें कि मैंने सूरज के नीचे हर दूसरे फिक्स की कोशिश की है जब तक कि मैंने इसे खुद डीबग करने का फैसला नहीं किया।

ALSO अपने पासपोर्ट को अपडेट करना सुनिश्चित करें। हाल के हफ्तों में इसमें कुछ बदलाव हुए हैं।

मैं नीचे अपना संदर्भ लिंक करूंगा, यह बहुत विस्तृत और अच्छी तरह परिभाषित है कि मैंने क्या किया और मैं समाधान कैसे प्राप्त हुआ।

आनंद लें!

https://github.com/laravel/passport/issues/151