config = $config; $this->encrypter = $encrypter; } /** * Create a new API token cookie. * * @param mixed $userId * @param string $csrfToken * @return Cookie */ public function make($userId, string $csrfToken): Cookie { $config = $this->config->get('session'); $expiration = Carbon::now()->addMinutes($config['lifetime']); return new Cookie( BitinflowAccounts::cookie(), $this->createToken($userId, $csrfToken, $expiration), $expiration, $config['path'], $config['domain'], $config['secure'], true, false, $config['same_site'] ?? null ); } /** * Create a new JWT token for the given user ID and CSRF token. * * @param mixed $userId * @param string $csrfToken * @param Carbon $expiration * @return string */ protected function createToken($userId, string $csrfToken, Carbon $expiration): string { return JWT::encode([ 'sub' => $userId, 'csrf' => $csrfToken, 'expiry' => $expiration->getTimestamp(), ], $this->encrypter->getKey()); } }