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的主要内容,如果未能解决你的问题,请参考以下文章

仅使用 Lumen 中的电子邮件登录 (JWT Auth)

Auth 尝试方法在 Laravel/Lumen + JWT + 用户自定义模型中如何工作

流明,身份验证尝试总是返回 false(jwt 或 auth)

Laravel / Lumen Auth JWT令牌在后续请求中无效,是否可能已过期?

Laravel/Lumen Auth JWT 令牌在后续请求中无效,它可能已过期吗?

Auth0 与 ReactJS 和 Lumen - 受众看起来像一个随机字符串