无法为 api 路由 laravel 设置 cookie

Ale*_*pov 3 php api laravel laravel-routing

使用后端(laravel)和前端 SPA(vue.js、vue-cli 3)进行服务。我需要通过 httpOnly cookie (不是 localStorage)进行身份验证。我使用tymondesigns/jwt-auth作为 api auth 包。

\n\n

我的环境是:

\n\n
    \n
  • API路线:http://brideplanner.test/api
  • \n
  • SPA路线:http://app-test.brideplanner.test:81/
  • \n
\n\n

我的登录路径是/api/auth/login,控制器方法是:

\n\n
public function login()\n    {\n        $credentials = request([\'email\', \'password\']);\n        $user = User::where(\'email\',\'=\',$credentials[\'email\'])->first();\n        if (!$user || !$token = auth()->claims([\'sub\' => $user->id, \'csrf-token\' => str_random(32) ])->attempt($credentials)) {\n            return response()->json([\'error\' => \'Unauthorized\'], 401);\n        }\n        return response()\n            ->json(\'success\')\n            ->withCookie(\'token\', $token, config(\'jwt.ttl\'), ".brideplanner.test", null, false, false);\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

token但是当我尝试向 API 发送请求时, cookie 存储中没有任何项目。这里出了什么问题?为什么没有令牌?我应该怎么办?

\n\n

UPD:我通过邮递员测试了请求,并得到了令牌:

\n\n
Set-Cookie \xe2\x86\x92token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9icmlkZXBsYW5uZXIudGVzdFwvYXBpXC9hdXRoXC9sb2dpbiIsImlhdCI6MTU1MTM5NDMwNCwiZXhwIjoxNTUxMzk1MjA0LCJuYmYiOjE1NTEzOTQzMDQsImp0aSI6Im9uU1NtWEpSU0prR3NKc3giLCJzdWIiOjEsInBydiI6Ijg3ZTBhZjFlZjlmZDE1ODEyZmRlYzk3MTUzYTE0ZTBiMDQ3NTQ2YWEiLCIwIjoic3ViIiwiMSI6ImNzcmYtdG9rZW4iLCJjc3JmLXRva2VuIjoiTE9jSDFCWG9ITFJBMjlFYTg2MG1XQXhrVnpTR2gzT2oifQ.mnR4C6bwMIVptU64eZ6tN-gCYyFEuCIk_dm6dJsXrLY; expires=Thu, 28-Feb-2019 23:06:44 GMT; Max-Age=900; path=.brideplanner.test; domain=.brideplanner.test; httponly\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是当我从我的 SPA ( ) 发送请求时http://app-test.brideplanner.test:81/,它出错了。

\n

cee*_*yoz 5

在默认的 Laravel 安装中,api路由没有Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse启用处理 cookie 的中间件 ( )。

如果您确实需要基于 cookie 的身份验证,您可以在 API 路由上启用此中间件,但请务必阅读差异