laravel - 带有 Javascript 的 Laravel Passport API
问题描述
到目前为止,我将访问令牌存储在本地存储中。现在我想把它移到cookies中。
所以我将 \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class, 添加到 Kernel.php 中。我还更改了我的 axios 调用:
axios.get('/forum', {
params: {
filterBy: vm.filterBy,
filterDirection: vm.filterDirection,
theme: vm.theme
},
withCredentials: true,
headers: {
//'Authorization': 'Bearer ' + this.getToken,
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN':window.Laravel.csrfToken
}
}).then(function (response) {
vm.posts=response.data
}).catch(function (error) {});
您可以看到我在从本地存储发送访问令牌的地方评论了授权标头。我看到请求标头中添加了 CSRF 令牌,并且访问令牌保存在 X-XSRF-TOKEN 中。还有一个带有值的Cookie:XSRF-TOKEN:(token值)。
现在我收到错误:Route[login] not defined。
也许问题是在 Cookie 值中有 XSRF-TOKEN 而不是 laravel_token ?
登录api调用
axios.post('/login', {
username: credentials.username,
password: credentials.password,
}).then(response => {
const token = response.data.access_token
localStorage.setItem('access_token', token)
localStorage.setItem('username', credentials.username)
resolve(response)
}).catch(error => {
reject(error)
})
然后在后端我创建令牌:
$response = $http->post(config('services.passport.login_endpoint'), [
'form_params' => [
'grant_type' => 'password',
'client_id' => config('services.passport.client_id'),
'client_secret' => config('services.passport.client_secret'),
'username' => $request->username,
'password' => $request->password,
]
]);
return json_decode((string) $response->getBody(), true);
解决方案
推荐阅读
- amazon-s3 - 使用额外参数 AWS S3 访问私有文件
- php - 在php中制作自动回复
- qt - qmake 不复制文件(安装)
- php - PHP将字节数组作为字符串转换为pdf
- c++ - 如何将 QByteArray 转换为 std::istream 或 std::ifstream?
- c++ - 如何更改 unordered_map 中的键?
- dynamics-crm - 如何更新 Dynamics CRM 状态代码/状态代码选项集排序顺序?
- azure - 为 Application Insights 配置的 Azure Log Analytics 显示长时间执行评估
- python-2.7 - flask-jwt-extended 始终为 /login 请求提供相同的令牌
- video - 在 kartik-v/yii2-widget-fileinput 中显示视频缩略图