Buscar API com Cookie
Estou experimentando a nova API de busca, mas está tendo problemas com os cookies. Especificamente, após um login bem-sucedido, há um cabeçalho de Cookie em solicitações futuras, mas a Fetch parece ignorar esses cabeçalhos e todas as minhas solicitações feitas com a Fetch não são autorizadas.
É porque o Fetch ainda não está pronto ou o Fetch não funciona com os Cookies?
Eu construo meu aplicativo com o Webpack. Também uso a opção Buscar no React Native, que não tem o mesmo problema.
cookies fetch-api
— Khanetor
A busca não usa cookies por padrão. Para habilitar o cookie, faça o seguinte:
de mesma origem não funciona mais, incluem não (ver resposta da @ Jerry): developers.google.com/web/updates/2015/03/introduction-to-fetch
@jpic: 'include' funciona apenas para solicitações de origem cruzada, mas não para solicitações de mesma origem. Documentos oficiais: github.com/github/fetch#sending-cookies
Qual é o motivo, então, de ter cookies de reposição, caso sejam legíveis em js com busca?
— Martin Bajcar
Eu acredito same-origin(que faz ainda trabalho) significa que mais cabeçalhos serão respeitados (biscoitos, etc.), mas seu código terá acesso limitado à resposta.
@JohnBalvinAriasThx. Como entendi mais tarde, ter o cookie updponly significa que não é legível por document.cookie, mas ainda está disponível para solicitações de ajax ou busca.
Além da resposta de @ Khanetor, para aqueles que trabalham com solicitações de origem cruzada: credentials: 'include'
Exemplo de solicitação de busca JSON:
como você define o cookie?
— pomo
O cookie é definido no lado do servidor. No meu caso, eu estava usando cookies de reposição.
@Khanetor posso definir cookies usando o document.cookie por javascript e depois enviar a solicitação?
@ospider Você pode enviá-lo no cabeçalho.
— 10101010
@ospider Achei que apenas definir o valor document.cookieera suficiente para ser incluído nos pedidos.
— Skwidbreth 2/04
Acabaram de resolver. Apenas dois f. dias de força bruta
Para mim, o segredo estava no seguinte:
Liguei para POST / api / auth e verifique se os cookies foram recebidos com sucesso.
Em seguida, chame GET / api / users / with credentials: 'include'e obtenha 401 sem autenticação, pois nenhum cookie foi enviado com a solicitação.
A tecla é para definir também credentials: 'include'para a primeira /api/authchamada.
Eu tenho exatamente o seu problema. O cookie da sessão nunca é enviado na solicitação de dados GET. 401. Tentei o Axios e o Fetch. mesmo resultado. 2 possibilidades: a loja de login POST doesnt o cookie recebido ou os seguintes dados GET does not enviar o cookie armazenado
— Rhubarb65
@ Rhubarb65, para ganhar isso, você deve especificar credentials: 'include'primeiroPOST /api/auth
Sim, eu tinha isso, mas ele quer o suficiente. Eu uso um proxy devserver (cliente HTTP)
Sim, eu tinha credenciais, mas não foi suficiente. Eu estava usando um proxy devserver para passar pelo CORS: (cliente http) - proxy - (servidor https). Acredito que isso significava que o cookie sessionid do servidor não estava definido no navegador porque os cookies seguros exigem https. Então eu adicionei a bandeira https: true no proxy devserver e que fixa-lo
Bem saúde. Sua resposta significou que me levou apenas 1 dia de força bruta. :)
Se você está lendo isso em 2019, credentials: "same-origin"é o valor padrão.
Mas observe que nem todos estão usando um navegador suficientemente atualizado. Me deparei com essa pergunta porque minha própria versão do Firefox (60.x, a mais recente no Debian Stretch) não define isso por padrão.
Apenas adicionando aqui as respostas corretas para os .net webapi2usuários.
Se você estiver usando corsporque o site do cliente é veiculado a partir de um endereço diferente do seu webapi, precisará incluir também SupportsCredentials=truena configuração do servidor.