2016-05-23 23 views
8

Tôi đang thực hiện một đăng nhập với căn cứ hỏa lực (v3) Auth và tôi trúng vấn đề này:đăng nhập căn cứ hỏa lực với nhà cung cấp mới (Google) loại bỏ nhà cung cấp trước đó (mật khẩu)

  1. dấu hiệu tài khoản lên ban đầu với email và mật khẩu .
  2. Đăng xuất.
  3. Sau đó, đăng nhập bằng Google.

Tôi mong đợi một lỗi phàn nàn rằng địa chỉ email được sử dụng cho một tài khoản khác, sau đó yêu cầu người dùng nhập mật khẩu để liên kết tài khoản, nhưng thay vào đó Firebase sẽ tự động xóa đăng nhập email/mật khẩu và trả về một thông báo thành công.

Mã để xác thực với Google:

var provider = new firebase.auth.GoogleAuthProvider(); 
firebase.auth().signInWithPopup(provider).then(
    result => { 
     console.log("federated (google) result", result); 
    }, 
    error => { 
     console.log("federated (google) error", error); 
    } 
); 

Mã để xác thực với email và mật khẩu:

// Login: 
firebase.auth().signInWithEmailAndPassword(this.state.email, this.state.password).then(
    ok => { 
     console.log("email/pass sign in success", ok); 
    }, 
    error => { 
     console.log("email/pass sign in error", error); 
    } 
) 

// Register: 
firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password).then(
    ok => { 
     console.log("Register OK", ok); 
    }, 
    error => { 
     console.log("Register error", error); 
    } 
) 

tôi thấy in the guide rằng liên kết tài khoản được thực hiện bằng hợp đồng đầu tiên ở một người sử dụng với nhà cung cấp hiện tại của họ/Phương thức và chỉ sau đó yêu cầu thông tin đăng nhập/nhận mã thông báo cho phương thức/nhà cung cấp xác thực mới. Trong trường hợp của tôi, tôi không biết nếu họ có các nhà cung cấp xác thực khác cho đến khi quá muộn (Firebase sẽ ghi đè nó).

Có cách nào để phát hiện email đã được thực hiện trước khi Firebase ghi đè chi tiết của tài khoản đã tồn tại và yêu cầu người dùng nhập mật khẩu của họ và liên kết các tài khoản không? Hoặc, thậm chí tốt hơn, hãy liên kết các tài khoản tự động vì chúng đã đăng nhập bằng Google và địa chỉ email khớp nhau?

+0

Vì Firebase 3 cho phép bạn đăng nhập bằng các mchanisms khác nhau .. bạn có thể muốn kết hợp các cơ chế khác nhau với nhau để có chế độ xem thống nhất. Tham khảo https://firebase.google.com/docs/auth/android/account-linking – ErstwhileIII

+1

Chính xác. Tôi muốn liên kết các cơ chế khác nhau nhưng cụ thể vấn đề (hoặc nhầm lẫn, xem câu trả lời) là những gì xảy ra khi người dùng đã có tài khoản với cơ chế A (nói email/mật khẩu) và lần sau anh ghé thăm, quên nó và đăng nhập với phương pháp B (nói Google). Địa chỉ email giống nhau, vì vậy các tài khoản sẽ được liên kết tự động (như lập trình bạn không biết có tài khoản với email đó đã có trong quá trình đăng nhập) hoặc đăng nhập sẽ trả về lỗi để bạn có thể đặt một số thông tin đăng nhập để giải quyết vấn đề này. Tôi đã viết trong câu trả lời của tôi những gì thực sự xảy ra. –

Trả lời

6

Tôi đã tìm ra. Firebase hoạt động như mong muốn và đây không phải là vấn đề kỹ thuật/mã hóa. Đó là một vấn đề về tài liệu.

Khi một người dùng đăng nhập với email và mật khẩu, đăng xuất và các dấu hiệu với một phương pháp khác nhau (mà không được sử dụng trước đó), có hai điều có thể xảy ra:

  1. Nếu email được xác nhận, thông tin đăng nhập email/mật khẩu được ghi nhớ khi bạn đăng nhập với nhà cung cấp mới (kết quả mong muốn trong câu hỏi của tôi).

hoặc

  1. Nếu email chưa được xác nhận, người dùng được cập nhật như vậy mà thông tin email/mật khẩu được loại bỏ và các phương pháp đăng nhập mới sẽ được lưu giữ. Chi tiết người dùng như displayName không được cập nhật tự động.
+0

Bạn vẫn không trả lời được câu hỏi của riêng mình, có cách nào để phát hiện và cho người dùng biết điều này sắp xảy ra không? –

+0

Tôi đã trả lời câu hỏi "hoặc thậm chí tốt hơn" của tôi. Tôi muốn thực hiện kiểm tra với mục đích duy nhất là thực sự liên kết các tài khoản. Vì điều đó xảy ra tự động nếu e-mail được xác minh, tôi không cần thực hiện kiểm tra nữa. Tóm lại, tôi đã không tìm được cách để làm điều đó. –

+0

Nếu không sử dụng xác minh email, tốt nhất nên có giải pháp để người dùng có thể được thông báo (mật khẩu của họ sẽ không còn hoạt động) tại một số thời điểm trước khi SSO hoàn tất. –

Các vấn đề liên quan