Calling Firebase `validatePassword` outside of an Injection context
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 42/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- angular, firebase, typescript
- Área
- authentication
Línea de trabajo
Comienza en el punto de entrada validatePassword y en el wrapper runInInjectionContext mostrado; después, sigue cómo AngularFire gestiona la instancia de Auth y el contexto de inyección. Determina si la advertencia es esperada y si el wrapper es necesario; se considera terminado cuando se documente el patrón de llamada correcto o se simplifique la validación sin la advertencia.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Is the running outside of injection context warning legitimate when using validatePassword?
My code:
import { EnvironmentInjector, inject, runInInjectionContext } from '@angular/core';
import { Auth, validatePassword } from '@angular/fire/auth';
import type { PasswordValidationStatus } from '@angular/fire/auth';
import type { AbstractControl, AsyncValidatorFn, ValidationErrors } from '@angular/forms';
import { getPasswordControlValue } from './util';
/**
* Validate against the Firebase Project Authentication Password Policy.
*
* Note: at this time there is no actual need for this because the policy only enforces length and
* other Validators already check for that. However it is nice to know how to do this.
*/
export const passwordFirebaseValidator = (): AsyncValidatorFn => {
const auth: Auth = inject(Auth);
const environmentInjector = inject(EnvironmentInjector);
return async (control: AbstractControl<unknown>): Promise<ValidationErrors | null> => {
const value = getPasswordControlValue(control);
// Like Validators.email, rely on Validators.required to check for blank passwords.
if (value == undefined) {
return null; // eslint-disable-line unicorn/no-null -- ValidatorFn returns null
}
const { passwordPolicy: _, ...status } = await runInInjectionContext(
environmentInjector,
async (): Promise<PasswordValidationStatus> => validatePassword(auth, value),
);
return status.isValid ? null : { firebasevalidator: status }; // eslint-disable-line unicorn/no-null
};
};
I added EnvironmentInjector and runInInjectionContext and that got rid of the warning, but is all this necessary? It would be nice if validation was simplier.
- Lenguaje dominante
- TypeScript
- Estrellas
- 7.8k
- Forks
- 2.2k
- Merge medio
- 3 d 6 h
- PR fusionados (30 d)
- 5
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de angular/angularfire
-
comp: build/pipeline type: bug version: current (v17+)
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
angular/angularfire#3766 ·
-
comp: schematics type: bug version: current (v17+)
Dificultad 3/5 1-2 días Aptitud para principiantes 76/100
angular/angularfire#3768 ·
-
comp: docs type: chore version: current (v17+)
Dificultad 4/5 3-5 días Aptitud para principiantes 58/100
angular/angularfire#3764 ·
-
comp: firestore comp: ssr priority: P0 (critical) type: feature version: current (v17+)
angular/angularfire#3757 · 1 asignado ·
-
Six `firebase` entry points have no `@angular/fire` equivalent, so their exports are unreachable Abiertocomp: core type: feature
angular/angularfire#3755 · 1 asignado ·
Todos los issues de angular/angularfire
Issues similares
-
[Bug]: Discord Activity titles with emoji are rejected as over 80 characters when they are not Abiertoclawsweeper:linked-pr-open clawsweeper:no-new-fix-pr clawsweeper:source-repro impact:message-loss issue-rating: 🦞 diamond lobster maturity:stable P2
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Eynzof/Hermes-CN-Desktop#616 ·
-
ZCode 3.14.3 に対応する Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
supermomonga/zcode-acp#24 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
growthbook/growthbook#7100 ·
-
triage
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100