2016-01-18 10 views
5

के माध्यम से प्रमाणीकरण मैं लैरवेल 5.2 के साथ एक विश्वसनीय API विकसित कर रहा हूं। उदाहरण के लिए api_keyलार्वेल 5.2 एपीआई

$this->storageKey = 'api_token'; 

मैं कुछ और करने के लिए इस स्तंभ नाम बदलना चाहते हैं,: टोकन लाइन 46 पर \Illuminate\Auth\TokenGuard\TokenGuard.php पर स्थित गार्ड में टोकन के लिए स्तंभ नाम api_token के रूप में परिभाषित किया गया है।

मैं यह कैसे कर सकता हूं? मैं कोर TokenGuard.php फ़ाइल को संशोधित नहीं करना चाहता हूं।

+0

आप इसे क्यों बदलना चाहते हैं? आप मेरी तालिका में – Digitlimit

+0

प्राप्त करने का प्रयास कर रहे हैं, कॉलम का नाम 'api_key' है। इसलिए, मैं लारवेल को 'api_key' कॉलम की तलाश करना चाहता हूं और टोकन की खोज करते समय 'api_token' कॉलम नहीं चाहता हूं। –

उत्तर

16

TokenGuard में निर्मित storageKey फ़ील्ड को संशोधित करने का कोई तरीका नहीं है। इसलिए, आपको अपना Guard कक्षा बनाने की आवश्यकता होगी जो फ़ील्ड सेट करता है, और Auth को अपने Guard कक्षा का उपयोग करने के लिए बताएगा।

सबसे पहले, कक्षा बनाकर शुरू करें जो आधार TokenGuard कक्षा को बढ़ाता है। इस उदाहरण में, यह app/Services/Auth/MyTokenGuard.php पर बनाया गया है:

namespace App\Services\Auth; 

use Illuminate\Http\Request; 
use Illuminate\Auth\TokenGuard; 
use Illuminate\Contracts\Auth\UserProvider; 

class MyTokenGuard extends TokenGuard 
{ 
    public function __construct(UserProvider $provider, Request $request) 
    { 
     parent::__construct($provider, $request); 
     $this->inputKey = 'api_key'; // if you want to rename this, as well 
     $this->storageKey = 'api_key'; 
    } 
} 

बार जब आप अपने वर्ग बनाने के बाद आपको Auth इसके बारे में बताने के लिए की जरूरत है। आप अपने AuthServiceProvider सेवा प्रदाता पर boot() विधि में ऐसा कर सकते हैं:

public function boot(GateContract $gate) 
{ 
    $this->registerPolicies($gate); 

    Auth::extend('mytoken', function($app, $name, array $config) { 
     return new \App\Services\Auth\MyTokenGuard(Auth::createUserProvider($config['provider']), $app['request']); 
    }); 
} 

और अंत में, आप अपने नए mytoken गार्ड का उपयोग करने के Auth बताने के लिए की जरूरत है। यह config/auth.php कॉन्फ़िगरेशन फ़ाइल में किया जाता है।

'guards' => [ 
    'api' => [ 
     'driver' => 'mytoken', 
     'provider' => 'users', 
    ], 
], 
+1

बहुत बहुत धन्यवाद, यह सहायक है। –

+1

धन्यवाद @ पैट्रिकस, मैं इसके लिए नया हूं और यह स्वीकार नहीं कर सकता कि कैसे स्वीकार किया जाए। तो मैंने सामान्य ज्ञान लागू किया और ग्रे चेक मार्क पर क्लिक किया, यह हरा हो गया। विस्तारित उत्तर के लिए धन्यवाद, इससे मदद मिली। –

+0

@patricus मैं उपयोगकर्ता टेबल के साथ किसी अन्य तालिका संबंध से api_token कैसे परिभाषित कर सकता हूं? https://stackoverflow.com/questions/46319639/how-to-change-api-token-column-in-token-guard – Katerou22

1

दुर्भाग्य से इसे कॉन्फ़िगर करने का कोई तरीका नहीं है।

एक अन्य कुंजी का उपयोग करने का एकमात्र तरीका है अपना खुद का "गार्ड" बनाना: Adding Custom Guards

आप TokenGuard कक्षा का विस्तार कर सकते हैं और __constructor अपने स्वयं के कॉलम नामों के साथ ओवरराइड कर सकते हैं।

संबंधित मुद्दे