#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()};
}