php - 无法为 api 路由 laravel 设置 cookie

标签 php laravel api laravel-routing

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

我的环境是:

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

我的登录路径是/api/auth/login, Controller 方法是:

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

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

UPD:我通过 postman 测试了请求并获得了 token :

Set-Cookie →token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9icmlkZXBsYW5uZXIudGVzdFwvYXBpXC9hdXRoXC9sb2dpbiIsImlhdCI6MTU1MTM5NDMwNCwiZXhwIjoxNTUxMzk1MjA0LCJuYmYiOjE1NTEzOTQzMDQsImp0aSI6Im9uU1NtWEpSU0prR3NKc3giLCJzdWIiOjEsInBydiI6Ijg3ZTBhZjFlZjlmZDE1ODEyZmRlYzk3MTUzYTE0ZTBiMDQ3NTQ2YWEiLCIwIjoic3ViIiwiMSI6ImNzcmYtdG9rZW4iLCJjc3JmLXRva2VuIjoiTE9jSDFCWG9ITFJBMjlFYTg2MG1XQXhrVnpTR2gzT2oifQ.mnR4C6bwMIVptU64eZ6tN-gCYyFEuCIk_dm6dJsXrLY; expires=Thu, 28-Feb-2019 23:06:44 GMT; Max-Age=900; path=.brideplanner.test; domain=.brideplanner.test; httponly

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

最佳答案

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

如果你真的需要基于 cookie 的身份验证,你可以在你的 API 路由上启用这个中间件,但一定要阅读 the differences .

关于php - 无法为 api 路由 laravel 设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54935502/

相关文章:

php - Yii2 excel导入 'PHPExcel_IOFactory'未找到

php - str_replace() 忽略计数参数?

php - vQmod for OpenCart 2 安装说明

laravel - 网址中的问号

api - WSO2 API 管理器支持 API 联合吗?

php mysql 查询输出文件

php - 当列不明确时,有什么方法可以强制 Mysql 在 where 子句中使用 select 中的列?

php - Laravel 服务提供者说明

javascript - 发送后出现错误 "can' t 设置 header ”

c - OpenSSL C API : Certificate chain validation with CRL