Goole Firme para iOS o Android con acceso sin conexión, el servidor siempre obtiene redirect_uri_mismatch

Estoy construyendo un flujo de signos de Google con react-native utilizando esta lib https://github.com/devfd/react-native-google-signin/ .

La lib funciona muy bien, puedo iniciar sesión con google con éxito, pero tenemos que pedir acceso sin conexión a la api, no para la aplicación web que utilizamos este flujo. Https://developers.google.com/identity/sign-in/web/server-side-flow .

Y para la web funciona perfectamente, pero cuando tratamos de hacer lo mismo en la aplicación nativa, usamos la configuración para eso en la lib reativa-nativa.

GoogleSignin.configure({ webClientId: 'the client id of the backend server', iosClientId: 'the client id of the application', offlineAccess: true, forceConsentPrompt: true, scopes: [ 'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/plus.me', 'https://www.googleapis.com/auth/gmail.readonly', 'https://www.googleapis.com/auth/pubsub' ] }) 

De esto obtenemos una respuesta adecuada de la lib, que incluye:

 serverAuthCode: <one-time token to access Google API from the backend on behalf of the user> 

Pero cuando intentamos intercambiar ese código:

 const google = require('googleapis'); const OAuth2 = google.auth.OAuth2; const oauth2Client = new OAuth2( process.env.GOOGLE_CLIENT_ID, process.env.GOOGLE_CLIENT_SECRET, 'postmessage' ); export function getToken (code: string): Promise<any> { return new Promise((resolve, reject) => { oauth2Client.getToken(code, (err, tokens) => { if (!err) { resolve(tokens); } else { reject(err); } }); }); } 

Siempre obtengo y error de redirect_uri_mismatch o invalid_grant .

En este punto no sé qué más necesito cambiar. Tal vez alguien sepa lo que está pasando aquí.

Ok, encontré la solución. Y es bastante fácil.

Cuando utiliza su ServerAuthCode para intercambiar por un token de usuario, debe establecer su retorno URI en el backend igual a null.

Esto es lo que hice al final con mi método getToken. ¡Ahora todo funciona como un encanto!

 export function getToken (code, typeOf = 'web') { const redirectUri = (typeOf === 'movil') ? null : 'postmessage'; const oauth2Client = new OAuth2( process.env.GOOGLE_CLIENT_ID, process.env.GOOGLE_CLIENT_SECRET, redirectUri ); return new Promise((resolve, reject) => { oauth2Client.getToken(code, (err, tokens) => { if (!err) { resolve(tokens); } else { reject(err); } }); }); } 
  • MAILTO Enlace en el correo electrónico para iniciar un nuevo correo electrónico
  • Notificación de empuje en Web móvil
  • Cómo implementar el programa de referencia en aplicaciones móviles para Android y iPhone
  • Estilo de pantalla cuando el teclado virtual está activo
  • Corriendo R's C Core Only
  • Desarrollo de iOS y Android en Windows
  • ¿Cómo se desarrolla el desarrollo de plataformas móviles en la práctica hoy (año 2013)?
  • Notificaciones Locales en Cordova 3.0.0
  • NativeScript: vista personalizada de la cámara
  • Detección de diferentes formas dinámicamente como (Círculo, cuadrado y Rectángulo) de la cámara?
  • Importación y convocatoria de carriles específicos de plataforma desde la plataforma general en Fastlane
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.