Lumen JWT Auth всегда возвращает 401 на другом маршруте после успешного входа в систему

#api #routes #jwt #lumen #unauthorized

#API #маршруты #jwt #lumen #несанкционированный

Вопрос:

У меня есть lumen jwt restapi с пользовательской таблицей пользователей (например, pengguna) с nomor в качестве первичного ключа и tgl_lahir в качестве пароля. с api / login проблем нет, и он генерирует токен, но когда я пытаюсь использовать другой маршрут, такой как api / buku, возврат всегда 401 неавторизованный, хотя заголовок авторизации содержит действительный токен после входа в систему.

мои модели, такие как

 <?php
namespace App;

use IlluminateAuthAuthenticatable;
use LaravelLumenAuthAuthorizable;
use IlluminateDatabaseEloquentModel;
use IlluminateContractsAuthAuthenticatable as AuthenticatableContract;
use IlluminateContractsAuthAccessAuthorizable as AuthorizableContract;

use TymonJWTAuthContractsJWTSubject;

class User extends Model implements AuthenticatableContract, AuthorizableContract, JWTSubject
{
    use Authenticatable, Authorizable;
    protected $primaryKey = 'nomor';
    protected $table = 'pengguna';
    public $timestamps = false;

    protected $fillable = [
        'nomor','nama','alamat'
    ];

    protected $hidden = [
        'tgl_lahir ',
    ];

    public function getJWTIdentifier()
    {
        return $this->getKey();
    }
    
    public function getJWTCustomClaims()
    {
        return [];
    }
}
  

мой BukuController

 <?php

namespace AppHttpControllers;

use AppBuku;
use IlluminateHttpRequest;
use IlluminateSupportFacadesDB;

class BukuController extends Controller
{

    public function __construct()
    {
        $this->middleware('auth');
    }
    
    public function showAllBuku()
    {
        return response()->json(Buku::all());
    }

}
  

мои маршруты

 $router->group(['prefix' => 'api'], function () use ($router) {
    $router->post('login', 'AuthController@login');
    $router->get('buku',  ['uses' => 'BukuController@showAllBuku']);
});
  

config/auth.php

 <?php

return [
    'defaults' => [
        'guard' => 'api',
        'passwords' => 'users',
    ],

    'guards' => [
        'api' => [
            'driver' => 'jwt',
            'provider' => 'users',
        ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => AppUser::class
        ]
    ],
];
  

существующая таблица pengguna не разрешает создавать поле идентификатора, подобное lumen / laravel auth, если я прокомментировал код в Middleware Authenticate, например :

 public function handle($request, Closure $next, $guard = null)
    {
        
//if this block commented is working
        if ($this->auth->guard($guard)->guest()) {
            return response('Unauthorized.', 401);
        }

        return $next($request);
    }
  

это working..is есть другой способ для моего случая?спасибо за вашу помощь

Комментарии:

1. извините за мою ошибку, моя проблема решена путем добавления этого в пользовательскую модель -> общедоступная функция getAuthIdentifierName(){ return $this-> nomor; } общедоступная функция getAuthIdentifier(){ return $this->{$this-> getAuthIdentifierName()}; }

2. Вы можете добавить свой ответ на этот вопрос

Ответ №1:

извините за мою ошибку, моя проблема решена путем добавления этого в пользовательскую модель

 public function getAuthIdentifierName(){ 
return $this->nomor; 
} 

public function getAuthIdentifier(){ 
return $this->{$this->getAuthIdentifierName()}; 
}