feat(auth): sesión de teléfono completa y testeable en las dos plataformas - #20
Closed
rndevelo wants to merge 1 commit into
Closed
feat(auth): sesión de teléfono completa y testeable en las dos plataformas#20rndevelo wants to merge 1 commit into
rndevelo wants to merge 1 commit into
Conversation
…ormas Entrar por SMS dejaba una sesión distinta según la plataforma: Android la construye leyendo el FirebaseUser, iOS solo recibe el uid de Swift y fabricaba UserSession(userId, email = null). Cualquier pantalla que pinte el email o mire isEmailVerified se comportaba distinto para el mismo usuario, y la que se equivocaba era iOS. El arreglo va en el sitio común, no en cada actual: cuando la plataforma dice que ha firmado, el usuario ya está en Firebase, así que la fuente de verdad es el gateway. Es el mismo patrón que ya usa SocialTokenResult.PlatformHandled, donde Swift firma y Kotlin vuelve a leer la sesión. Si el gateway no ve usuario se conserva el resultado de la plataforma, que es mejor que inventar un fallo cuando la plataforma acaba de decir que fue bien. Debajo había un agujero mayor: los dos puntos de entrada del teléfono son funciones expect de nivel superior, así que el flujo entero era intesteable desde commonTest — el mismo hueco que FLE-90 cerró para el resto del provider y dejó abierto aquí. Entra PhoneAuthPort, cuarto puerto de la misma familia, con default en el constructor. Rojo antes de implementar solo AC-01, que es el único que cambia comportamiento; los otros tres tests son cobertura que antes no se podía escribir y así se apuntan en la trazabilidad. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rkh7MzVRj5iXT2rLiqyW6A
hgarciaalberto
pushed a commit
that referenced
this pull request
Aug 19, 2026
…21) Cierra de una vez la pila 003→010, que estaba encadenada PR sobre PR. Sustituye a #14, #15, #16, #17, #18, #19 y #20. - 003 Apple Sign-In de producción en el demo y contrato correcto para Swift - 004 Cablea GitHub, Microsoft, Twitter, Facebook y teléfono en el demo (+ su spec) - 005 Revoca el token de Apple antes de borrar la cuenta - 006 Cierra también la sesión de GoogleSignIn al salir, en iOS - 007 Pasa los scopes de AppleSignInConfig al handler de iOS - 008 Fija el bundle id de iOS y alinea el magic link - 009 Sesión de teléfono completa y testeable en las dos plataformas - 010 Documenta lo que falta para construir el demo y deprecar código muerto Las ocho PRs intermedias apuntaban cada una a la rama de la anterior, y el CI solo disparaba en PRs contra develop/main, así que ninguna había pasado un check. Eso lo arregló #23. Esta pila se validó entera antes de entrar: ambos jobs en verde.
Contributor
|
Integrada en |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Sale de #19.
Qué
Entrar por SMS dejaba al usuario con una sesión distinta según la plataforma: Android leía el
FirebaseUserentero, iOS solo recibía eluidy fabricabaUserSession(userId, email = null).Cualquier pantalla que pinte el email o mire
isEmailVerifiedse comportaba distinto para el mismousuario.
El arreglo va en el sitio común, no en cada plataforma: cuando la plataforma dice que ha firmado,
el usuario ya está en Firebase, así que la fuente de verdad es el gateway.
El
?: resultconserva el resultado de la plataforma si el gateway no ve usuario: mejor queinventar un fallo cuando la plataforma acaba de decir que todo fue bien.
Y de paso
PhoneAuthPorthace testeable un flujo que era intesteable por construcción — los dos puntos deentrada eran funciones
expectde nivel superior, que no se pueden falsear desdecommonTest.Cuatro tests donde no había ninguno.
De los cuatro ACs solo uno nació rojo; los otros tres son cobertura que antes era imposible
escribir, y la tabla de trazabilidad lo dice así en vez de venderlos como TDD.
Verificado en Windows:
:custom-login:ktlintCheck+:custom-login:testDebugUnitTest(254 tests, 0 fallos). El Swift de esta rama no se ha compilado nunca: pendiente de Mac.🤖 Generated with Claude Code
https://claude.ai/code/session_01E41idMYhfgBSz2EeuNUn5Q