首页 > 解决方案 > 带有 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);

标签: laravellaravel-passport

解决方案


推荐阅读