2017-11-24 44 views
1

주어진 userId가 존재하지 않으면 사용자를 생성하는 firebase 서버 측 (firebase 기능) 코드가 있습니다.존재하지 않는 사용자를 생성 할 때 uid-already-exist 오류

대개 정상적으로 작동하지만 거의 실패하지 않습니다.

function createUserIfNotExist(userId, userName) { 
    admin.auth().getUser(userId).then(function (userRecord) { 
     return userRecord; 
    }).catch(function (error) { 
     return admin.auth().createUser({ 
      uid: userId, 
      displayName: userName, 
     }) 
    }) 
} 

주어진 userId를 존재하지 않는

는 admin.auth(). 인 getUser()는 그래서 admin.auth().는 createUser()

{ code: 'auth/user-not-found', message: 'There is no user record corresponding to the provided identifier.' } 

을 던져 캐치 절이라고합니다. 그러나 다음 오류로 인해 때때로 실패합니다.

{ Error: The user with the provided uid already exists. 
    at FirebaseAuthError.Error (native) 
    at FirebaseAuthError.FirebaseError [as constructor] (/user_code/node_modules/firebase-admin/lib/utils/error.js:39:28) 
    at new FirebaseAuthError (/user_code/node_modules/firebase-admin/lib/utils/error.js:104:23) 
    at Function.FirebaseAuthError.fromServerError (/user_code/node_modules/firebase-admin/lib/utils/error.js:128:16) 
    at /user_code/node_modules/firebase-admin/lib/auth/auth-api-request.js:399:45 
    at process._tickDomainCallback (internal/process/next_tick.js:135:7) 
    errorInfo: 
    { code: 'auth/uid-already-exists', 
    message: 'The user with the provided uid already exists.' } }  

내 코드에 Firebase 버그가 있습니까?

+0

UID는 무작위 적이기 때문에 아직 존재하지 않는 사용자의 UID는 어떻게 얻습니까? 나는. 이 값들은'createUserIfNotExist'를 호출 할 때 어디서 오는가? –

+0

@ FrankvanPuffelen UID는 타사 인증 (facebook messenger platform)에 의해 생성됩니다. 우리는 사용자 정의 인증을 사용합니다. – grayger

답변

1

getUser()에 대한 호출이 실패하는 이유 auth/internal-error 외에 다른 documented reasons 많은 것으로 나타나지 않지만 명시 적으로 새 사용자의 생성을 요청하기 전에 auth/user-not-found를 확인하기 위해 안전 할 것이다 :

function createUserIfNotExist(userId, userName) { 
    admin.auth().getUser(userId).then(function (userRecord) { 
     return userRecord; 
    }).catch(function (error) { 
     if (error.code === 'auth/user-not-found') { 
      return admin.auth().createUser({ 
       uid: userId, 
       displayName: userName, 
      }); 
     } else { 
      console.error("Error getting user data:", error); 
     } 
    }) 
} 
+0

감사합니다. 귀하의 error.code 점검을 포함시키지 않았지만, catch 절에 던져 질 때 항상 'auth/user-not-found'가됩니다. – grayger