Calling Firebase `validatePassword` outside of an Injection context
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 42/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- angular, firebase, typescript
- Ambito
- authentication
Direzione di ricerca
Inizia dal punto di ingresso validatePassword e dal wrapper runInInjectionContext mostrato, quindi segui il modo in cui AngularFire gestisce l’istanza Auth e il contesto di injection. Determina se l’avviso è previsto e se il wrapper è necessario; il lavoro è completato quando viene documentato il pattern di chiamata corretto oppure la validazione viene semplificata senza l’avviso.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- TypeScript
- Stelle
- 7.8k
- Fork
- 2.2k
- Merge medio
- 3g 6h
- PR unite (30g)
- 5
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di angular/angularfire
-
comp: build/pipeline type: bug version: current (v17+)
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
angular/angularfire#3766 ·
-
comp: schematics type: bug version: current (v17+)
Difficoltà 3/5 1-2 giorni Idoneità per principianti 76/100
angular/angularfire#3768 ·
-
comp: docs type: chore version: current (v17+)
Difficoltà 4/5 3-5 giorni Idoneità per principianti 58/100
angular/angularfire#3764 ·
-
comp: firestore comp: ssr priority: P0 (critical) type: feature version: current (v17+)
angular/angularfire#3757 · 1 assegnatario ·
-
Six `firebase` entry points have no `@angular/fire` equivalent, so their exports are unreachable Apertacomp: core type: feature
angular/angularfire#3755 · 1 assegnatario ·
Tutte le issue di angular/angularfire
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
safetrustcr/dApp-SafeTrust#426 ·
-
area:workflow bug ready-for-agent
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
fil-donadoni/tolaria#4409 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
Fission-AI/OpenSpec#1960 ·
-
Add dependabot Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
corsairdev/corsair#1764 ·