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 .
- ¿Puede una aplicación IOS / Android Phonegap hacer nada pero enlazar a un sitio web?
- Método de cifrado para iPhone y Android
- ¿Cómo admitir la visualización de PDF para todos los navegadores móviles?
- Mover el archivo de video capturado por la cámara usando cordova (phonegap) no es refrescante galería thumbnail
- ¿Cómo puedo obtener un objeto File de PhoneGap camera.getPicture?
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í.
- Lista predeterminada de fuentes que soporta los sistemas operativos android, ios y blackberry
- Depuración de javascript en tablets / teléfonos Android?
- Portales de aplicaciones móviles centralizados y descentralizados
- Chat móvil de plataforma cruzada
- Diferencias entre Android e iOS al usar Google Analytics en PhoneGap 1.2.0
- Recomendaciones para el formato / protocolo de .NET Web Service para Android, iPhone, etc.
- Autenticar la aplicación HTML5 envuelta con Phonegap (o equivalente)
- Lista y nombres de los gestos con pantalla táctil
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); } }); }); }
- Marcador personalizado en google maps en android con vector icono de activo
- Diferencias RelativeLayout entre 1,5 y 2,1