Lumen JWT Auth登录成功后总是在其他路由返回401
Posted
技术标签:
【中文标题】Lumen JWT Auth登录成功后总是在其他路由返回401【英文标题】:Lumen JWT Auth always return 401 in other route after login success 【发布时间】:2020-12-22 04:53:20 【问题描述】:我有带有自定义用户表(例如:pengguna)的 lumen + jwt restapi,其中 nomor 作为主键,tgl_lahir 作为密码。api/login 没有问题,它会生成一个令牌,但是当我尝试使用其他路由时,例如作为 api/buku,虽然授权标头包含登录后的有效令牌,但总是返回 401 未授权
我的模特喜欢
<?php
namespace App;
use Illuminate\Auth\Authenticatable;
use Laravel\Lumen\Auth\Authorizable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Tymon\JWTAuth\Contracts\JWTSubject;
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 App\Http\Controllers;
use App\Buku;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
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']);
);
配置/auth.php
<?php
return [
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => \App\User::class
]
],
];
如果我在 Middleware\Authenticate 中注释代码,则现有的 pengguna 表不允许创建像 lumen/laravel auth 这样的 ID 字段:
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);
它正在工作..我的情况还有其他方法吗?感谢您的帮助
【问题讨论】:
抱歉我的错误,我的问题通过在用户模型中添加这个解决了 -> public function getAuthIdentifierName() return $this->nomor; 公共函数 getAuthIdentifier() return $this->$this->getAuthIdentifierName(); 你可以添加你对这个问题的答案 【参考方案1】:对不起,我的问题通过在用户模型中添加解决了
public function getAuthIdentifierName()
return $this->nomor;
public function getAuthIdentifier()
return $this->$this->getAuthIdentifierName();
【讨论】:
以上是关于Lumen JWT Auth登录成功后总是在其他路由返回401的主要内容,如果未能解决你的问题,请参考以下文章
Auth 尝试方法在 Laravel/Lumen + JWT + 用户自定义模型中如何工作
流明,身份验证尝试总是返回 false(jwt 或 auth)
Laravel / Lumen Auth JWT令牌在后续请求中无效,是否可能已过期?