Estoy tratando de usar fetch
React Native para obtener información de la API de Product Hunt. Obtuve el token de acceso adecuado y lo guardé en estado, pero parece que no puedo pasarlo dentro del encabezado de autorización para una solicitud GET.
Esto es lo que tengo hasta ahora:
var Products = React.createClass({
getInitialState: function() {
return {
clientToken: false,
loaded: false
}
},
componentWillMount: function () {
fetch(api.token.link, api.token.object)
.then((response) => response.json())
.then((responseData) => {
console.log(responseData);
this.setState({
clientToken: responseData.access_token,
});
})
.then(() => {
this.getPosts();
})
.done();
},
getPosts: function() {
var obj = {
link: 'https://api.producthunt.com/v1/posts',
object: {
method: 'GET',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + this.state.clientToken,
'Host': 'api.producthunt.com'
}
}
}
fetch(api.posts.link, obj)
.then((response) => response.json())
.then((responseData) => {
console.log(responseData);
})
.done();
},
La expectativa que tengo para mi código es la siguiente:
- Primero, obtendré
fetch
un token de acceso con datos de mi módulo API importado - Después de eso, estableceré la
clientToken
propiedad dethis.state
igual al token de acceso recibido. - Luego, ejecutaré lo
getPosts
que debería devolver una respuesta que contenga una serie de publicaciones actuales de Product Hunt.
Puedo verificar que el token de acceso se está recibiendo y que lo this.state
está recibiendo como su clientToken
propiedad. También puedo verificar que getPosts
se está ejecutando.
El error que recibo es el siguiente:
{"error": "unauthorized_oauth", "error_description": "Proporcione un token de acceso válido. Consulte nuestra documentación de api sobre cómo autorizar una solicitud de api. Asegúrese también de que necesita los ámbitos correctos. Por ejemplo," público privado \ "para acceder a puntos finales privados".}
He estado trabajando bajo la suposición de que de alguna manera no estoy pasando el token de acceso correctamente en mi encabezado de autorización, pero parece que no puedo entender exactamente por qué.
fuente
Respuestas:
Ejemplo de búsqueda con encabezado de autorización:
fuente
'Authorization'
encabezado silenciosamente no se puede adjuntar por firebug. Incluso he intentado incluirlocredentials: 'include'
en el objeto opcional.new Headers()
Resulta que estaba usando el
fetch
método incorrectamente.fetch
espera dos parámetros: un punto final para la API y un objeto opcional que puede contener cuerpo y encabezados.Estaba envolviendo el objeto deseado dentro de un segundo objeto, lo que no me dio el resultado deseado.
Así es como se ve en un alto nivel:
Estructuré mi objeto como tal:
fuente
401
respuesta./
al final que me faltaba ...Tuve este problema idéntico, estaba usando django-rest-knox para los tokens de autenticación. Resulta que nada estaba mal con mi método de búsqueda que se veía así:
Estaba corriendo apache.
Lo resuelto este problema para mí fue cambiando
WSGIPassAuthorization
a'On'
enwsgi.conf
.Tenía una aplicación Django implementada en AWS EC2, y usé Elastic Beanstalk para administrar mi aplicación, así que en el
django.config
, hice esto:fuente
fuente