angular / angular/angularfire

Auth: Cannot use `browserPopupRedirectResolver` on demand

Đang mở
#3,038 6 bình luận 5 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
TypeScript
Star
7.8k
Fork
2.2k
Merge trung bình
22 giờ 28 phút
Pull request đã merge (30 ngày)
6

Mô tả

### Version info

**Angular:** 12.2.12

**Firebase:** 9.2.0

**AngularFire:**: 7.1.1

### How to reproduce these conditions

**Steps to set up and reproduce**

Initialiaze firebase auth without a popup resolver. This prevents the infamous iframe.js to load.

```
provideAuth(() => {
const auth: Auth = initializeAuth(getApp(), {
persistence: [
indexedDBLocalPersistence,
browserLocalPersistence,
browserSessionPersistence
],
popupRedirectResolver: undefined
});
if (environment.emulator) {
connectAuthEmulator(auth, 'http://localhost:9099', {disableWarnings: true});
}

return auth;
}),
```

Then when a social auth is required, load the resolver on demand:

```
import {Auth, browserPopupRedirectResolver, signInWithPopup, GoogleAuthProvider} from '@angular/fire/auth';

await signInWithPopup(this.auth, new GoogleAuthProvider(), browserPopupRedirectResolver);
```

### Debug output

** Errors in the JavaScript console **

```
GoogleSigninDirective.onclick() TypeError: Class constructor BrowserPopupRedirectResolver cannot be invoked without 'new'
at angular-fire.js:206
at angular-fire.js:163
at ZoneDelegate.invoke (zone.js:372)
at Object.onInvoke (core.js:28680)
at ZoneDelegate.invoke (zone.js:371)
at Zone.run (zone.js:134)
at NgZone.run (core.js:28534)
at run (angular-fire.js:163)
at new (angular-fire.js:206)
at _getInstance (index-238d6fa9.js:535)
at _withDefaultResolver (index-238d6fa9.js:7714)
at index-238d6fa9.js:7931
at Generator.next ()
at asyncGeneratorStep (asyncToGenerator.js:3)
at _next (asyncToGenerator.js:25)
at asyncToGenerator.js:32
at new ZoneAwarePromise (zone.js:1387)
at asyncToGenerator.js:21
at _signInWithPopup (index-238d6fa9.js:7934)
at signInWithPopup (index-238d6fa9.js:7928)
at angular-fire.js:225
at angular-fire.js:160
at ZoneDelegate.invoke (zone.js:372)
at Zone.run (zone.js:134)
at NgZone.runOutsideAngular (core.js:28579)
at runOutsideAngular (angular-fire.js:160)
at angular-fire.js:225
at AuthService. (auth.service.ts:38)
at Generator.next ()
at tslib.es6.js:76
at new ZoneAwarePromise (zone.js:1387)
at __awaiter (tslib.es6.js:72)
at AuthService.google (auth.service.ts:37)
at AuthService.descriptor.value (track-event.decorator.ts:32)
at GoogleSigninDirective. (google-signin.directive.ts:21)
at Generator.next ()
at tslib.es6.js:76
at new ZoneAwarePromise (zone.js:1387)
at __awaiter (tslib.es6.js:72)
at GoogleSigninDirective.onclick (google-signin.directive.ts:20)
at GoogleSigninDirective.descriptor.value (catch.decorator.ts:41)
at GoogleSigninDirective_click_HostBindingHandler (google-signin.directive.ts:8)
at executeListenerWithErrorHandling (core.js:15315)
at wrapListenerIn_markDirtyAndPreventDefault (core.js:15353)
at HTMLButtonElement. (platform-browser.js:561)
at HTMLButtonElement.sentryWrapped (helpers.js:73)
at ZoneDelegate.invokeTask (zone.js:406)
at Object.onInvokeTask (core.js:28667)
at ZoneDelegate.invokeTask (zone.js:405)
at Zone.runTask (zone.js:178)
```

### Expected behavior

The popup should open.

### Actual behavior

The popup is not opening, instead you see the described error.

### Temporary workaround

As a temporary workaround, I import all dependencies directly from 'firebase/auth'. Don't know though, if this could have a negative impact on Angular (Zone)

```
import {browserPopupRedirectResolver, GoogleAuthProvider, signInWithPopup} from 'firebase/auth';
```

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu với phần khởi tạo provideAuth và lời gọi signInWithPopup được nêu trong báo cáo, sau đó kiểm tra wrapper AngularFire trong angular-fire.js và bên gọi trong auth.service.ts. Tái hiện lỗi bằng cách cung cấp browserPopupRedirectResolver theo yêu cầu; hoàn tất khi popup social-auth mở mà không gặp lỗi constructor.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
angular, firebase, typescript
Lĩnh vực
authentication
Loại issue
Lỗi
Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.