首页 > 解决方案 > laravel 护照拒绝生成的访问令牌

问题描述

我按照以下步骤操作:

  1. 安装护照包作为它的文件
  2. 使用 db:seed 创建了一个用户(我很惊讶地看到 api_token 列不存在错误。总的来说,我手动添加了此列)
  3. 使用 db:seed 创建了一个用户(我不知道 api_token 的用途,但我随机填充了它)
  4. 通过http://localhost:8000/oauth/token通过密码凭证成功生成访问令牌

问题是在使用生成的令牌时我总是得到

{"message":"Unauthenticated."}

生成的令牌样本:

{
    "token_type": "Bearer",
    "expires_in": 31536000,
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImNhNjdlNTA5MDI0M2FhZjMwNDViZGQ1OTc5MDI3YTc4ODA4MWFiMTA4NDk5OThmZTE0NmJhYmRiZmNkYzRlN2MxNjcyZDdhZjdmNTU4Y2Y4In0.eyJhdWQiOiIyIiwianRpIjoiY2E2N2U1MDkwMjQzYWFmMzA0NWJkZDU5NzkwMjdhNzg4MDgxYWIxMDg0OTk5OGZlMTQ2YmFiZGJmY2RjNGU3YzE2NzJkN2FmN2Y1NThjZjgiLCJpYXQiOjE1NDEyNjE5MTYsIm5iZiI6MTU0MTI2MTkxNiwiZXhwIjoxNTcyNzk3OTE2LCJzdWIiOiIxIiwic2NvcGVzIjpbXX0.JuTqO1W9gSLq1gA0ku8snsfaZXvX08Rjr_KbFtLzNOgP1mpzLbkOT7QzwdBVwOU4Fq6qUaZYP7bTKVPOSr9D8kBJLHEvN83vG-7JnSK87128bVVL1SCI31-ZsyG53LU0py2HOsycgZup7X3NXweDQ9YFNDZneuWASNhb5j06didSZ_p4C1eON3ptjnay1H2zjYHZoQ2prFQgi-ZQpXxt3c_4WhciDb-Yb8a8VBdub1mvj5gMF8kkrTN9cLlIpTFDsxGJTAkD0wYCX0W_I6Aggjc5YSEK_ovYJ5b4Ag2B8chrKqLXvRbplYkMCypsNxyR-OMJe0VCOISvutUdvU0UU7JvbyEoE45uFzV6wAqDMXQF0G10Sd1QB5fSzWHjj2pBonjnYGrEOynXpt8AGmU-Ip53rHAC3k7Tif0CE5QQ-kFJ01b-BW-MQp2MFwRRHZTOkXSnsfGocZBaryTHfgdGMPS7hcxJDh-l7h1g6wq6ywNIevI-XiUaC_XjrSUn-uUe4J1XtK1S6wM58OeprLtfbsleYOoYH2nnmZ6eXpCaeS3ENVTnT5t3sJV_TgUfR8hOuPlCB8uqFNE9atBGgP2fiNcgNkyu5uG0AXM3_drvgsSumyvJYXLRMfkHeaAA3HTWKzUck-yhxuSqNpTZPMt-Ml1FzNx4ABUQDB7WrXG3Rd0",
    "refresh_token": "def50200e277884b2343dc16700e2ccd4b6f46ae31131fc6dc4ef643204d74696dceafa430647d89732cf1a06c944f04583510afd1f53aa84cfacdc7fb81843ec163802922171451e0d2511788b7ee71d6e341ae07977c45f44373d9db2c65b81618dd7e0fe066a3f76c4339b6308a4561c23eb31b1fd291fbf91e379c98ca1ee0f7c689eac1aac2ea0b4a5468f954ea82d2aa5d505b38d92ccb9663b0ecefb3702903738bb843b1d8cd12a9feeefcb3705713cb7b699de02c4dafa32616caf9e32a965a30224a806d8b6cb776f81da0961ce1e2cd8348e7e2b8ffd42b0ba9fd9f9e1f34b6160f4ed1e41d778a8207e17ca512aee2368a43ec3bcc7b5897d2774fd94b3ff5e7ce2cc0ce386f42e4a43d4d49a126d629bc90aa72e087f67183509b739008ce73839801a58ff76f1c7d310e9ba79c52ec4758bdcfaa53e15ed286528ee27ac0e9e8498776920b8d1cd5d6aff4029b9fc19a02c8b71badd960f190a8"
}

我的包版本:

    "php": "^7.1.3",
    "barryvdh/laravel-cors": "^0.11.2",
    "fideloper/proxy": "^4.0",
    "laravel/framework": "5.7.*",
    "laravel/passport": "^7.0",
    "laravel/tinker": "^1.0",
    "spatie/laravel-permission": "^2.23"

中间件守卫:

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

有什么我想念的吗?

更新 :

我注意到当我将每个随机字符串放在用户表的 api_token 列中时,我可以通过 Bearer Token 传递来轻松地验证用户

问题: 所以在通过以下方式验证用户身份后:

Auth::attempt($credentials)

框架应该自动填充token_api还是我应该手动填充?

标签: phplaravelauthenticationoauth-2.0laravel-passport

解决方案


它变成了laravel缓存问题:

  1. laravel/passport 不需要 token_api 列
  2. 只需运行 php artisan config:cache以重置缓存

推荐阅读