无法为API路线Laravel设置Cookie

时间:2019-02-28 22:49:12

标签: 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,控制器方法为:

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项。怎么了为什么没有令牌?我该怎么办?

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

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/)发送请求时,它就出错了。

1 个答案:

答案 0 :(得分:0)

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

如果确实需要基于cookie的身份验证,则可以在API路由上启用此中间件,但是请务必在the differences上进行阅读。