現在、私は自分のプロジェクトでJWTを実装しています。このAPIは特定のmodel
でのみ利用可能です。このモデルは、私がログインしたいときに宣言したカスタムガードを使って正しく動作します。契約と認証可能な特性が正しく適用されていますが、->byId
メソッドは常に失敗します。ここに私のコードがあります:私は実行するとLaravel + JWT - ユーザーが見つかりませんでした。
'user' => \App\Customer::class,
:私のjwt.php
ファイルで
namespace App;
class Customer extends Model implements Authenticatable {
use \Illuminate\Auth\Authenticatable;
、私は私のカスタムモデルを使用するように指示しました
JWTAuth::fromUser($customer);
私は適切なトークンを受け取ります。
私はAuthorization: Bearer <token>
ヘッダーを渡してこれをチェックするためにPostmanを使用します。トークンが正しく設定されています。
私の保護されたルートに後続の要求のために、私はこの方法でユーザーを認証しよう:
$token = JWTAuth::parseToken()->authenticate();
->authenticate()
は常に失敗します。
それが失敗した理由は、このためです:
if (! $this->auth->byId($id)) {
return false;
}
これは常にfalseを返します。
しかし、id
を$id = $this->getPayload($token)->get('sub');
コールから解決すると、この特定のカスタマーの有効なIDがわかります。さらに、このモデルは従来のモデル、PKは、id
列で、実際に、私の識別子が正しく設定されている:
'identifier' => 'id',
はなぜCustomer
のインスタンスを解決することができEloquentUserAdapter
ではないでしょうか?
私はGoogleを精査し、さまざまな修正を試みましたが、何も達成されていません。どんな助けでも大歓迎です。
更新
私が実行されたSQLクエリをダンプしてきたし、それが参照しようとテーブルには、それは私のカスタムモデルではありません、私のデフォルトのユーザー・モデルです。何故ですか?
アップデート2 たUserInterfaceにバインドtymon.jwt.provider.user
シングルトンは正しく私のカスタムモデルを参照:
return $app['tymon.jwt.provider.user'];
は提供:
EloquentUserAdapter {#849
#user: Customer {#850
#primaryKey: "id"
#table: "customers"
アップデート3
JWTを起動するにはユーザープロバイダ、それは知っている私が使用したいモデルS:
$model = $app->make($this->config('user'));
収量:
Customer {#1040
#primaryKey: "id"
#table: "customers"
試みに対してあなたのトークン
byId
やbyCredentials
を認証できるようになります:私はしてみてくださいでしたmichail1982 @明確 – michail1982それは何もない。 – Ohgodwhy