2016-01-18 9 views
5

私はLaravel 5.2でRESTful APIを開発しています。ライン46上\Illuminate\Auth\TokenGuard\TokenGuard.phpに位置トークンガードではトークンの列名がapi_token次のように定義されますLaravel 5.2 APIによる認証

$this->storageKey = 'api_token'; 

私はたとえばapi_keyのために、何か他のものに、この列名を変更したいです。

どうすればいいですか?コアファイルTokenGuard.phpを修正したくありません。

+0

なぜそれを変更したいですか?私のテーブルで – Digitlimit

+0

を達成しようとしています、列の名前は 'api_key'です。したがって、laravelはトークンを検索するときに 'api_key'列を検索し、 'api_token'列は検索しません。 –

答えて

16

組み込みのTokenGuardには、storageKeyフィールドを変更する方法がありません。そのため、フィールドを設定する独自のGuardクラスを作成し、AuthGuardクラスを使用するように指示する必要があります。

最初に、TokenGuardクラスを拡張する新しいGuardクラスを作成します。この例では、それは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はそれについて知っている必要があります。

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を伝える必要があります:あなたは、あなたのAuthServiceProviderサービスプロバイダにboot()方法でこれを行うことができます。これはconfig/auth.php設定ファイルで行われます。

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

ありがとう、これは役に立ちます。 –

+1

ありがとうございます@patricus、私はこれに新しいと受け入れる方法を把握できませんでした。私は常識を適用し、灰色のチェックマークをクリックし、それは緑色になりました。精巧な答えをありがとう、それは助けた。 –

+0

@patricus私はどのようにユーザーテーブルと別のテーブルリレーションからapi_tokenを定義できますか? https://stackoverflow.com/questions/46319639/how-to-change-api-token-column-in-token-guard – Katerou22

1

残念ながら、それを設定する方法はありません。

他のキーを使用する唯一の方法は、自分自身の「Guard」を作成することです:Adding Custom Guards

TokenGuardクラスを拡張し、__constructorを独自の列名で上書きすることができます。

関連する問題