2013-07-20 1 views
0

사용자가 Google, Twitter 등을 통해 등록 할 때 이름이 겹칠 수 있습니다. 내 앱에서 사용자 이름은 고유 한 색인을 가지고 있습니다. 다른 사람이 처음 로그인 할 때마다 새 문서가 컬렉션에 저장되므로 고유 인덱스가 실패하는 경우가 있습니다. 사용자를 가입에 대한 코드는 다음과 같이 진행됩니다 err 고유 인덱스 오류가있는 경우MongoDB에서 고유 색인이 실패 할 때 대체 기호 생성

  1. 는 어떻게 확인할 수 있습니다
    module.exports.findOrCreateUser = (provider, id, data, done) -> 
        User.findByAuth provider, id, (err, user) -> 
         if err? then done err 
         else if user? then done null, user 
         else 
          user = new User 
           auth: [{id: id, provider: provider}] 
           name: data.name 
           email: data.email 
          user.save (err) -> 
           if err? then done err else done null, user 
    

    그래서 내가 여기에 두 가지 문제가?
  2. 사용자 이름에 고유 한 접미사를 추가하는 가장 효율적인 방법은 무엇입니까?
+0

사용자가 로그인하는 데 사용한 서비스의 접두사/접미어는 어떻게됩니까? 예를 들어 google_username, twitter_username, facebook_username, ... – innoSPG

+0

Q (1)의 경우 '오류'에 "중복 키 오류 인덱스"와 같은 설명 메시지가 포함되어야한다고 확신합니다. 'err'을 한 번만 기록해서 알 수 있습니다. –

+0

@innoSPG : 좋은 생각입니다. 나는 그런 생각을하지 못했다. 그들이 로그인 할 때 사용한 서비스의 표시를 피하고 싶었지만 ... – Lanbo

답변

2
  1. err 객체는 몽고 쉘 줄 것 오류 메시지와 일치하는 message 속성이 있습니다. 고유 인덱스 오류가 다음과 비슷한 모습이 될 것입니다이 있는지 확인 :

    if (err && err.message.indexOf('E11000 ') !== -1) { 
        // this _id was already inserted in the database 
    } 
    
  2. 나는 이름에 서비스 이름을 추가 할 @innoSPG에 동의합니다. 사용자 이름과 관련된 서비스에 대한 표시를 원하지 않으면 사용자 이름에 카운터를 추가하고 사용될 때마다 사용자 이름을 증가 시키십시오.

관련 문제