programing

Mongodb + Atlas: '잘못된 인증 인증 실패.', 코드: 8000,

padding 2023. 7. 7. 18:41
반응형

Mongodb + Atlas: '잘못된 인증 인증 실패.', 코드: 8000,

저는 이것을 시도해 보았지만 작동하지 않습니다.

Mongodb + Atlas에 다음과 같은 오류가 있습니다.

MongoError: bad auth Authentication failed.
    at /Users/cyrus/Documents/Code/01. Code/Franklin-ford/franklin-ford-server/node_modules/mongodb-core/lib/auth/auth_provider.js:46:25
    at /Users/cyrus/Documents/Code/01. Code/Franklin-ford/franklin-ford-server/node_modules/mongodb-core/lib/auth/scram.js:215:18
    at Connection.messageHandler (/Users/cyrus/Documents/Code/01. Code/Franklin-ford/franklin-ford-server/node_modules/mongodb-core/lib/connection/connect.js:334:5)
    at Connection.emit (events.js:203:13)
    at processMessage (/Users/cyrus/Documents/Code/01. Code/Franklin-ford/franklin-ford-server/node_modules/mongodb-core/lib/connection/connection.js:364:10)
    at TLSSocket.<anonymous> (/Users/cyrus/Documents/Code/01. Code/Franklin-ford/franklin-ford-server/node_modules/mongodb-core/lib/connection/connection.js:533:15)
    at TLSSocket.emit (events.js:203:13)
    at addChunk (_stream_readable.js:295:12)
    at readableAddChunk (_stream_readable.js:276:11)
    at TLSSocket.Readable.push (_stream_readable.js:210:10)
    at TLSWrap.onStreamRead (internal/stream_base_commons.js:166:17) {
  ok: 0,
  errmsg: 'bad auth Authentication failed.',
  code: 8000,
  codeName: 'AtlasError',
  name: 'MongoError',
  [Symbol(mongoErrorContextSymbol)]: {}

DB를 인스턴스화하는 방법은 다음과 같습니다.

credentials.js:

const config = {
    mongoConnectionURL: "mongodb://cyruslk:<MY_PASS_HERE>@franklinford-shard-00-00-3dveb.mongodb.net:27017,franklinford-shard-00-01-3dveb.mongodb.net:27017,franklinford-shard-00-02-3dveb.mongodb.net:27017/test?ssl=true&replicaSet=FranklinFord-shard-0&authSource=admin&retryWrites=true&w=majority",
    mongoDatabaseName: "FranklinFord",
  }

의 메인 내메서에에서.server.js 추가:

const {MongoClient} = require("mongodb");
const connectionURL = config.mongoConnectionURL;
const databaseName = config.mongoDatabaseName;


  let sendToDb = (dataToInsert) => {
    MongoClient.connect(connectionURL, {
      useNewUrlParser: true,
    }, (error, client) => {

      if(error){
        console.log(error);
        return console.log("Unable to connect to the db.");
      }
      const db = client.db(databaseName);
      console.log(db);

      db.collection("ford_twitter").insertOne({
        masterData: dataToInsert
      }, (error, result) => {
        if(error){
          return console.log("unable to insert users");
        }
        console.log("Data successfully inserted");
      })
    })
  }

코드는 여기에서 찾을 수 있습니다.

도와주셔서 감사합니다.무슨 일이 일어나고 있는지 전혀 모르겠어요.

올바른 사용자 이름, 암호 및 DB 이름을 사용하고 있다는 것을 알고 이 문제를 겪었을 뿐이었습니다.

나는 db 사용자의 비밀번호를 더블 체크로 변경하려고 했지만 여전히 작동하지 않았습니다.

그런 다음 새 사용자를 생성하고, 사용자 관리 역할을 지정하고, 암호 등을 설정한 다음, 연결에 새 사용자와 암호(동일한 dbname)를 사용하여 작동했습니다.

정확히 어떤 문제가 있었는지는 모르겠지만, 여러분 중 일부가 시간을 절약하는 데 도움이 되기를 바랍니다:)

행운을 빕니다.

enter image description here

문제가 , 그 에 저도같문가있요었그, 문에쓰있었요어여열자어연결은제라고 있었습니다."mongodb+srv://<username>:<password>@cluster0.4h226.mongodb.n..."사용자 이름과 암호를 해당 문자열에 입력해야 합니다.

  1. 이름이 가 "password"라고하면, 는 "user"라고 적어야 ."mongodb+srv://user:password@cluster0.4h226.mongodb.n..."및 ">", "", "", "", "",

  2. 를 ASCII 코드 합니다.%를 들면 인사. 예들면를.#되요지일 입니다.%35.

비밀번호를 변경한 것과 같은 문제가 발생했지만 작동하지 않았습니다.내 비밀번호에는 내가 제거한 번호가 포함되어 있고 작동했습니다.

이것은 항상 비밀번호에 관한 것만은 아닙니다.

Though your error already answered by some people which was a password issue. However, looking at the comments and answer here, I see a lot of people having similar error but unable to solve with the provided answer. But why ?

이 오류는 비밀번호뿐만이 아닙니다.여기서 데이터베이스 이름, 암호 사용자 이름은 중요합니다.
데이터베이스 이름, 암호 및 사용자 이름이 URL의 일부이므로 URL의 이 세 부분 중 하나에 특수 문자를 사용하는 경우 이를 다음으로 대체해야 합니다.%그리고 나서.ASCII Code그 특별한 표시의. 예의 경우:$-을 그을대필 있사는인으로 .%36%45
그리고 분명히 제거합니다.<그리고.>또한 당신이 복사한 초기 링크에서 다음과 같은 서명을 합니다.<password>.
여기에서 ASCII 코드 참조
하십시오.

먼저 MongoServerError: bad auth: 오류입니다. 인증 실패는 사용자 이름과 암호가 잘못되었을 수 있음을 나타냅니다.

솔루션:credential.js에서 사용자 이름과 암호 주위의 괄호 <>를 제거하면 데이터베이스 연결이 됩니다.

답을 찾기 위해 많은 고민을 한 후, 저는 접속 스트림에 있는 제 <>가 여전히 비밀번호 주위에 있다는 것을 깨달았습니다.이것을 제거해야 합니다.

저도 같은 문제에 직면하여 +srv를 제거했는데 효과가 있었습니다.

다음과 같이 시도해 보십시오.

'CLIENT' : {'host' : 'connection_string_to_mongodb' }

connection_string에는 사용자 이름, 암호, 데이터베이스 이름, 클러스터 이름 등이 있으므로 클라이언트에 키-값 쌍을 하나만 지정합니다.그것은 나에게 효과가 있었다.

또한 암호에 숫자나 특수 문자가 없는지 확인합니다.

화이트리스트에 당신의 IP를 추가하는 것이 좋을 것입니다.네트워크 액세스 -> IP 주소 추가 -> 현재 IP로 이동한 다음 변경 사항을 저장하고 다시 시도하십시오. 도움이 되기를 바랍니다.

새로운 관리자 사용자 계정을 만드는 것은 나에게 효과가 있었습니다. 나는 이것이 피몽고뿐만 아니라 몽고 쉘과 작업할 때도 마찬가지라는 것을 발견했습니다.

해결책은 사용자 이름과 암호에서 괄호 <>를 제거하는 것입니다.올바른 데이터베이스 이름을 입력합니다.데이터가 데이터베이스에 게시되도록 데이터베이스에 대한 액세스 권한을 부여합니다.

이에 대한 해결책은 이름이나 암호에 숫자가 포함된 경우 사용자 이름과 암호가 이름과 숫자 사이에 '_'를 포함해야 한다는 것입니다.

사용

const config = {
    mongoConnectionURL: "mongodb://cyruslk:MY_PASS_HERE@franklinford-shard-00-00-3dveb.mongodb.net:27017,franklinford-shard-00-01-3dveb.mongodb.net:27017,franklinford-shard-00-02-3dveb.mongodb.net:27017/test?ssl=true&replicaSet=FranklinFord-shard-0&authSource=admin&retryWrites=true&w=majority",
    mongoDatabaseName: "FranklinFord",
  }

참고:

사용자 이름과 암호에서 '<' & '>'을 제거하고 사용자 이름과 암호가 콜론 바로 앞과 뒤에 있는지 확인합니다(숫자 = ":"). 콜론 앞뒤에 빈 공간이 없어야 합니다.

저는 다른 admin 사용자를 생성하여 이 문제를 해결했습니다.이미 관리자 사용자를 사용하고 있는 배포된 웹 앱이 있다는 것을 잊었습니다.그래서 다른 관리자 사용자를 생성하여 다른 웹 앱에서 Mongo URI로 사용하는 것이 이 인증 문제를 해결하는 데 도움이 되었습니다.

dotenv를 사용하는 경우 먼저 설치하고 index.js 페이지에서 호출했는지 확인합니다.require('dotenv').config();

가장 일반적이지 않은 실수는 .env 파일에 "USERNAME"이라는 이름의 변수를 생성하는 것일 수 있습니다.

//Do not create a variable named USERNAME=abc in the .env file 

사용하다${password}<password>

나열된 모든 솔루션을 시도했지만 데이터베이스 클러스터에서 "비밀번호에서 번호 제거"를 제외하고는 아무 것도 작동하지 않았습니다.그리고 그것은 성공하였다.

네트워크에서 생성되지 않은 데이터베이스의 사용자 이름과 암호를 확인합니다.

이것처럼.

           username    password                                 name of ur database                 

mongodb+srv://eshop1235:benonti1244$$@cluster0.4nzfbwx.mongodb.net/eshop-database?retryWrites=true&w=majority

다음에서 찾을 수 있는 모든 답변:

오른쪽 탐색:

보안.

 quickstart

 database access

 network access

옵션 편집.

여기에 이미지 설명 입력

이 작업을 수행하기 전에 데이터베이스가 "활성"인지 확인하십시오.

여기에 이미지 설명 입력

여기에 이미지 설명 입력

저도 같은 문제가 있었고 저에게 효과가 있었던 것은 제 사용자 이름을 야지군에서 야지군으로 변경한 것입니다. 저는 당신의 사용자 이름에 공백이나 특수 문자가 포함되어서는 안 된다고 생각합니다.

저도 같은 문제가 있었습니다.새 클러스터를 생성하면 문제가 해결됩니다.

허용된 특수 문자는 제가 잘못 가고 있는 부분이었습니다.계정에 입력한 방식과 동일하게 연결 URL에 암호를 입력하고 여기에 포함된 일부 문자를 포함하면 작동하지 않습니다.

제 경우 DB_URL을 doten(.env 파일) 안에 넣다가 실수로 DB_URL을 다음과 같이 넣었습니다.

DB_URL = "mongodb+srv://USERNAME:<password>@cluster0.8v3jxwm.mongodb.net/?retryWrites=true&w=majority"

이것은 실수입니다. 여기에 문자열 따옴표를 추가할 필요가 없습니다. 다음과 같이 해야 합니다.

DB_URL = mongodb+srv://USERNAME:<password>@cluster0.8v3jxwm.mongodb.net/?retryWrites=true&w=majority

MongoDB Atlas "Network Access" 설정에서 IP가 '화이트리스트'인지 다시 확인하거나 '어디서나 액세스' 옵션(0.0.0/0(현재 IP 주소 포함)을 사용합니다.
이것이 누군가에게 도움이 될지 모르겠습니다. 저는 node app.js를 통해 서버를 시작하고 있었습니다.
제가 대신 npm start(내 패키지)를 했습니다.json은 "시작": "node server/app.js")로 읽으며 연결이 완료되었습니다.
아마도 npm 없이 서버를 실행하고 있어서 .env 파일이 인식되지 않고 있었는데, 솔직히 잘 작동했습니다.

저는 같은 문제에 직면했고 해결책을 찾았습니다.하지만 데이터베이스 암호를 변경하면 작동합니다.[자동 생성된 암호를 유지합니다]

이러한 유형의 컨텍스트에서 특정 의미를 갖는 문자를 인코딩하는 방법인 백분율 인코딩(URL 인코딩이라고도 함)을 따라 웹 앱에서 동일한 문제를 해결했습니다.인코딩은 다음과 같은 특수 문자의 대체로 구성됩니다.여기에 설명된 것처럼 대체 문자의 ASCII 값을 16진수로 나타내는 '%'가 표시됩니다.

은 다음과 같습니다.!다음과 같이 인코딩해야 합니다.%21

pip install djongo
pip install dnspython
DATABASES = {
    'default': {
        'ENGINE': 'djongo',
         "NAME": "database name",
        "CLIENT": {
        "host": "connection_string_to_mongodb",
        
    },
        
    }
}

위의 코드는 나에게 효과가 있었습니다. 사용자 이름과 비밀번호를 별도로 제공하는 것은 효과가 없었습니다.

언급URL : https://stackoverflow.com/questions/60020381/mongodb-atlas-bad-auth-authentication-failed-code-8000

반응형