问题描述
我正在使用Laravel的Sanctum库对我的API进行身份验证,但是它无法正常工作,并且一切似乎都是故意的。
我在某人进行身份验证后创建了令牌,该令牌进入数据库的personal_access_token
表中。然后,将令牌插入Metatag中。然后,我使用默认的javascript检索元标记的内容(有效),并将其设置为bootstrap.js
文件中Axios的全局授权标头。
使用解密的承载令牌时,此方法有效。但是,当我开始在personal_access_token
上使用默认的 token 列时,它不起作用。
我定义令牌的方式
protected function authenticated(Request $request,$user)
{
$user->access_token = $user->createtoken('api-token')->plainTextToken;
return $request->wantsJson() ? response()->json($user,200) : redirect()->intended('/students');
}
那很好。有人认证后,它将插入新令牌。
<Meta name="access-token" content="{{auth()->user()->tokens()->first()->token}}" />
检查时可以看到令牌,就像这样:fd34a554cc5a6f14004f8728735375f980d81053b97f719be5bd504647d786cf
我将令牌设置为Axios的全局标头的方式
let Metatag = document.querySelector('Meta[name="access-token"]').content;
window.axios = require('axios');
axios.defaults.headers.common['Authorization'] = `Bearer ${Metatag}`;
在我切换到personal_access_table
之前没有问题。当我使用6|yqbI...
之类的令牌时,这种方法有效。
这现在返回401错误,当我单击该按钮时,我可以在“请求标头”中看到诸如Authorization: Bearer fd34a554cc5a6f14004f8728735375f980d81053b97f719be5bd504647d786cf
之类的令牌
解决方法
当我使用散列标记作为全局标头时,我得到了错误。
但是我已将此行添加到.env文件SANCTUM_STATEFUL_DOMAINS=localhost:8000
因为我的本地主机有一个端口,所以我需要在.env文件中手动定义它
该解决方案对我有用。