Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Can';t为api路由laravel设置cookie_Php_Laravel_Api_Laravel Routing - Fatal编程技术网

Php Can';t为api路由laravel设置cookie

Php Can';t为api路由laravel设置cookie,php,laravel,api,laravel-routing,Php,Laravel,Api,Laravel Routing,使用后端(laravel)和前端SPA(vue.js,vue cli 3)提供服务。我需要通过httpOnly cookie(而不是localStorage)进行身份验证。我使用作为api身份验证包 我的环境是: API路由:http://brideplanner.test/api SPA路线:http://app-test.brideplanner.test:81/ 我的登录路径是/api/auth/login,控制器方法是: public function login() {

使用后端(laravel)和前端SPA(vue.js,vue cli 3)提供服务。我需要通过httpOnly cookie(而不是localStorage)进行身份验证。我使用作为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/
),它出错。

在默认的Laravel安装中,
api
路由启用了处理Cookie的中间件(
Lightning\Cookie\middleware\AddQueuedCookiesToResponse


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

我更新了问题。我通过邮递员测试了请求,收到了预期的cookie集。但在浏览器中,它出错了。您可能有一个来自
.brideplanner.test
的cookie,它不是由
应用程序test.brideplanner.test:81设置的。请检查我突出显示的中间件方法。您的意思是我无法从
test.brideplanner.test
设置cookie
.brideplanner.test
?我不明白为什么它没有从请求设置为
/api/auth/login
,我是说你在响应中看到了cookie,因为
app test.brideplanner.test
正在发回它收到的
.brideplanner.test
cookie,但是它设置的新的或更新的cookie都没有设置,因为你没有中间件,谢谢!我为此伤了一个小时的脑筋。升级的Laravel和我的API身份验证刚刚停止工作…您考虑过使用Laravel Passport吗@dparoli passport在这种情况下是多余的,我不需要做第三方身份验证之类的事情。我只需要为我的SPA应用程序提供API