programing

오류 메시지:MongoError: URI 문자열을 통한 인증이 실패했습니다.

bestprogram 2023. 3. 8. 21:55

오류 메시지:MongoError: URI 문자열을 통한 인증이 실패했습니다.

mongo에서 지정한 연결 문자열을 통해 mongoDB 서버에 연결하려고 합니다.

"mongodb+srv://david:password@cluster0-re3gq.mongodb.net/test?retryWrites=true"

내 코드로 mongoose를 통해 연결을 호출합니다(비밀번호를 입력합니다).

const mongoose = require('mongoose');
const db = 'mongodb+srv://david:<password>@cluster0-re3gq.mongodb.net/test?retryWrites=true'
mongoose
    .connect(db, { 
        useNewUrlParser: true,
        useCreateIndex: true
      })
    .then(() => console.log('MongoDB connected...'))
    .catch(err => console.log(err));

코드를 실행하면 다음 오류가 발생합니다.

"MongoError: 잘못된 인증 인증에 실패했습니다."

그게 무슨 뜻인지 짐작 가는 거라도?

도 같은, 저 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아<password>는 ★★★★★★★★★★★★★★★★★★★★★★★」my_login_id:<my_password>'''이 되어 할 my_login_id:my_password

mongodb 계정 비밀번호와 사용자 비밀번호를 혼동하신 것 같습니다.계정 비밀번호가 아닌 사용자 비밀번호를 사용해야 합니다.그게 내 사건의 이유였어

이것은 접속 문자열에 입력한 패스워드가 잘못되어 있으며, 아마 Atlas Cluster에 접속하는 동안 Atlas 웹사이트에 로그인하기 위한 계정 패스워드를 사용할 수 없기 때문입니다.어느 경우든 클러스터 패스워드를 리셋하여 문제를 해결할 수 있습니다.

문제를 해결하려면 다음 단계를 따릅니다.

순서 1: - [MongoDB Atlas]페이지의 [Database Access From Side Navigation]을 클릭합니다.

2단계: 사용자 이름을 선택하고 오른쪽에서 편집 버튼을 클릭합니다.

스텝 3:- 비밀번호를 변경하려면 클릭합니다.

스텝 4: - update user를 클릭합니다.

비밀번호를 변경할 때는 특수문자는 인코딩이 필요하므로 비밀번호는 알파벳 순으로 유지하도록 합니다.이미지를 참조해 주세요.

이제 접속할 수 있는 건 여기까지입니다.

URI에서 credential을 사용하지 말고 다음과 같이 사용합니다.

mongoose.connect(mongodb+srv://clusterAnything.mongodb.net/test?retryWrites=true&w=majority, { user: process.env.MONGO_USER, pass: process.env.MONGO_PASSWORD, useNewUrlParser: true, useUnifiedTopology: true })

저 같은 경우에는 왼쪽과 오른쪽이 있어요.

다음과 같습니다.

<Password>

변경 내용:

Password

따라야 할 체크리스트:

1) 올바른 패스워드(Mongo 계정이 아닌 DB 사용자 패스워드)를 사용하고 있는지 확인합니다.

는, 모든 인코딩 되어 있는 를 들면 2) 「」, 「」의 URL」( 「」등p@sswordshould be p%40ssword를 참조해 주세요.

3) DB 사용자의 패스워드가 기억나지 않으면 Database Access (Mongo Atlas를 사용하는 경우)-> DB 사용자 선택 -> 편집 -> 새 패스워드 생성 -> Update User (사용자 업데이트)를 클릭하는 것을 잊지 마십시오.

(!) 보안 경고: 코드 안에 일반 텍스트로 비밀번호를 입력하지 마십시오. 여기에 제시된 권장 사항을 따르십시오.

는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★<password>그렇지 않은 경우 운영체제에 환경변수를 생성하여 process.env를 사용하여 호출하는 것이 좋습니다.예:

const password = process.env.YOURPASSWORDVARIABLE
const db = 'mongodb+srv://david:'+password+'@cluster0-re3gq.mongodb.net/test?retryWrites=true'

또한 env 변수 내에 URL 접속 문자열 전체를 넣을 수도 있습니다.

위의 답변과 더불어 Atlas 메뉴에서 현재 비밀번호로 읽은 내용과 MongoDB Atlas가 현재 비밀번호로 저장한 내용이 왜곡되어 있기 때문에 이 문제는 잘못된 데이터베이스 비밀번호 입력에 기인하는 것으로 보입니다.

새 비밀번호를 선택할 때 "복사" 버튼을 사용할 때 "버그"가 발생하는 것 같습니다.

도움이 된 것은 다음과 같습니다.

  • 웹에서 Atlas 열기
  • "데이터베이스 액세스"로 이동합니다.
  • 데이터베이스 사용자의 [Edit]을 클릭합니다.
  • 인증 방법으로 "비밀번호"를 선택합니다.
  • "비밀번호 편집"을 클릭합니다.
  • 암호 필드에서 "표시"를 클릭합니다.
  • "보안 비밀번호 자동 생성"을 클릭합니다.
  • 복사하려면 "복사" 버튼을 누르지 말고 마우스를 사용하여 수동으로 선택하고 마우스 또는 키보드 명령을 마우스 오른쪽 버튼으로 클릭하여 텍스트를 복사하십시오.
  • 아래의 "사용자 업데이트"를 클릭하십시오.

그런 다음 데이터베이스 사용자 목록을 검토하여 새로 생성한 암호와 동일한 암호를 가진 다른 데이터베이스 사용자가 없는지 확인합니다.

이제 이 연결 문자열을 사용하여 사용자 이름과 비밀번호 조합을 다시 시도하십시오(플레이스 홀더 문자 '$'와 '[]'는 제외).

'mongodb+srv://$[username]:$[password]@$[hostlist]/$[database]?retryWrites=true'


[복사] 버튼을 클릭하여 새 비밀번호를 자동 생성하면 자동 생성된 비밀번호가 이전 비밀번호로 재설정됩니다.따라서 새로운 자동 생성된 비밀번호는 맞다고 생각했지만 실제로는 이전 비밀번호로 다른 데이터베이스 사용자와 동일했습니다.패스워드 입력란에서 '표시'를 클릭할 때까지 이해할 수 없었습니다.

패스워드뿐만 아니라

사용자 또는 데이터베이스 비밀번호일 수 있는 모든 필드를 확인합니다.이 중 하나를 잘못 입력하면 인증 오류가 발생합니다.
왼쪽 페인의 [보안]아래에 있는 데이터베이스 접근으로 이동합니다.

그리고 ' 변경'을 사용해서 할 수 있습니다.edit버튼을 클릭합니다. 여러분의 는 '비밀번호가 있다' 입니다.P@sW0rd[ 된 정보를 을 할 수 .[ Database Users ] 화 、 URL 、 [ Database Users ]

client = MongoClient("mongodb+srv://giac:P@sW0rd@cluster0.wjdtk.mongodb.net/testc?retryWrites=true&w=majority")

다른 답변에서는 데이터베이스 이름의 철자를 잘못 입력해도 인증 오류가 발생한다고 하지 않았습니다.

이건 내게 효과가 있었다.

    mongoose.connect(
    `mongodb+srv://${process.env.MONGO_USER}:${process.env.MONGO_PASS}@cluster0.adv0t.mongodb.net/${process.env.MONGO_DATABASE}?retryWrites=true&w=majority`,
    {
      useNewUrlParser: true,
      useUnifiedTopology: true,
    }
  );

부모 디렉토리에 「.env」파일을 작성합니다(이 에 dotenv 를 인스톨 할 필요가 있습니다).커스텀 로케이션을 선택하는 경우는, 다음의 파일을 server.js/app.js 에 추가합니다).

require('dotenv').config({ path: '/custom/path/to/.env' }) //uses custom location

그렇지 않으면 server.js / app.js(서버를 시작하는 서버)에 추가합니다.

require('dotenv').config() //uses default location

.env 파일에서 사용자, 비밀번호 및 데이터베이스를 다음과 같이 정의합니다.

MONGO_USER=uSerName
MONGO_PASS=p@sSW0rd
MONGO_DATABASE=myDatabase

저도 비슷한 문제에 직면했는데, 이상하게도 데이터베이스 액세스에서 새 사용자를 생성했을 때 해결되었습니다.이번에는 패스워드 자동 생성을 클릭했습니다.그것은 문제가 되지 않을 것입니다만, 제 경우는 그것이 문제를 해결했습니다.

패스워드를 생성 및 복사한 후 사용자 업데이트를 잊어버리고 왜 작동하지 않는지 궁금했습니다.나중에 업데이트 버튼을 봤어요.아까는 눈에 띄지 않았어. 하하.문제를 해결했다.

데이터베이스 액세스 => 사용자 편집 => 비밀번호 생성/복사 => 갱신!그것은 나에게 효과가 있었다.

반드시 갱신해 주세요.

비밀번호 양쪽에서 꺾쇠 괄호를 제거하기만 하면 됩니다.

오답:
const db = 'mongodb+srv://username:<password>@cluster0-re3gq.mongodb.net/test?retryWrites=true'

정답:
const db = 'mongodb+srv://username:password@cluster0-re3gq.mongodb.net/test?retryWrites=true'

마지막으로 NodeJs 버전(2.2.12 이후) 클러스터 URL보다 낮은 등급의 연결 문자열을 사용하는 것이 성공했습니다.그런 다음 Atlas MongoDB에서 현재 IP 주소를 화이트리스트로 만들어야 합니다.Atlas MongoDB의 [Network Access]섹션에 0.0.0/0(현재 IP 주소 포함)과 같이 표시됩니다.클러스터 NodeJs 버전 2.2.12 이상에 연결

그리고 그 연결 문자열 URL을 그 부분에 일정하게 저장하는 것이 주요 문제였습니다.그래서 처음에는 연결 문자열 값을 단일/중따옴표로 저장했지만 Atlas mongoDB에서 해당 "비밀번호" 값을 구문 분석할 수 없어 인증 실패 오류가 발생할 때마다 해당 연결 문자열을 저장하기 위해 단일/중따옴표 대신 backtick(')을 사용했습니다.

NodeJs 어플리케이션을 통해 mongoDB Atlas를 연결하는 샘플 코드입니다.

const DB_USER = 'your username in atlas mongodb';

const PASSWORD = encodeURIComponent('your password in atlas mongodb');

const url = `mongodb://${DB_USER}:${PASSWORD}@cluster0-shard-00-00.3ytbz.mongodb.net:27017,cluster0-shard-00-01.3ytbz.mongodb.net:27017,cluster0-shard-00-02.3ytbz.mongodb.net:27017/sample-db?ssl=true&replicaSet=atlas-z26ao5-shard-0&authSource=admin&retryWrites=true&w=majority`;

mongoose.connect(url,
  {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true,
    useFindAndModify: true
  })
  .then(() => {
    console.log('Connected to database !!');
  })
  .catch((err)=>{
    console.log('Connection failed !!'+ err.message);
  });

올바른 사용자 이름, 비밀번호 및 DBname을 사용하고 있다는 것을 알고 문제가 발생했습니다.

db user의 패스워드를 더블 체크로 변경하려고 했지만, 아직 동작하지 않았습니다.

그 대신 새로운 사용자를 생성하여 admin 역할을 부여하고 비밀번호를 설정한 후 그 새로운 사용자 및 비밀번호(같은 dbname)를 접속에 사용했습니다.

무엇이 문제인지 정확히 알 수 없지만, 시간을 절약하는 데 도움이 되었으면 합니다.

거의 1시간 동안 URI를 조작하고 권한과 설정을 변경해 본 결과, 액티브한 VPN 접속으로 인해 이 에러 메세지가 표시되고 있는 것을 알게 되었습니다.VPN을 셧다운한 후 접속할 수 있었습니다.

따라서 다른 하지 않는 으로 확립되지 연결이 확립되지 가 있을 수 있습니다.mongodb요.bad auth

같은 문제가 있었습니다만, IP 주소를 현재의 IP로 설정하면, 서비스에 액세스 할 수 없게 되는 것을 알았습니다.mongo shell 또는 mongo compass를 사용하여 데이터베이스에 접근하기 위해서는 어디서든 데이터베이스에 접근할 수 있도록 하는 것이 적절했다.

mongoDB 패스워드 인증과 같은 문제가 발생하였습니다.

"오류: 잘못된 인증 인증에 실패했습니다."

위의 Pawan의 제안대로 MONGO_URI 링크 로그인 패스워드를 데이터베이스 패스워드로 교체했습니다.그것도 확인해 주세요.

가 생성되지 않은 경우 또는 이전에 생성된 경우 새 것으로 대체합니다.

제 경우는 패스워드가 잘못되어 있기 때문에, 에러를 진단하기 위해서, 다음의 순서에 따릅니다.

명령줄로 연결을 시도해야 합니다.

mongo "mongodb+srv://cluster0-j8ods.mongodb.net/test" --mongo:

여기에 이미지 설명 입력

응답은 다시 2020-04-26T11:48:27.641-0500 E QUERY [js]에러:부정한 인증에 실패했습니다.:

내 사용자, 내 경우 root 사용자의 비밀번호를 변경합니다. 그러면 권한이 부여됩니다.

mongodb+srv://jehat123:<password>@jehatarmancdeniz-x2yf7.mongodb.net/question-answer?retryWrites=true&w=majority

모든 비밀번호 부분 삭제

다음과 같이 사용:

mongodb+srv://jehat123:yourpass@jehatarmancdeniz-x2yf7.mongodb.net/question-answer?retryWrites=true&w=majority

또한 왼쪽에서 Database Access로 이동한 후 오른쪽에서 Add New Database User로 이동하여 새 데이터베이스 사용자를 생성하여 이 오류를 제거할 수 있습니다.이제 새 사용자 이름과 암호를 만들고 확인을 클릭합니다.이 새로운 사용자 이름과 비밀번호를 MongoUri로 바꿉니다.

My의 경우 password 변수를 직접 설정하여 위의 오류를 해결하였습니다.

DATABASE = "test"
#PASSWORD = os.environ.get("YOUR_PASSWORD") #This line was causing an error in code
PASSWORD = "YOUR_PASSWORD"                  # I added directly password variable

client = connect(
    DATABASE,
    host=f"mongodb+srv://mano:{PASSWORD}@cluster0.e2arj.mongodb.net/?retryWrites=true&w=majority",
    alias="default",
)

비밀번호 변경은 나에게 효과가 있었다.

nB: Atlas 비밀번호가 아닙니다.

mongodb+srv://david:password@cluster0-re3gq.mongodb.net/test?retryWrites=true

  • 'password'를 지정한 사용자 이름에 대해 등록한 암호로 바꿉니다.
  • net 뒤에 있는 'test'를 컬렉션에서 만든 DB 이름으로 대체합니다.

저는 MongoDB Atlas 페이지의 Password 필드를 탭해야 했습니다."Update User"를 클릭하기 전에

여기에 이미지 설명 입력

사용자 목록을 찾을 수 있는 "MongoDB Users" 탭으로 이동하십시오.암호를 재설정할 수 있는 편집을 클릭합니다.패스워드를 리셋 하면, 문제가 해결되는 일이 있습니다.

만약 당신이 이 문제를 가지고 있고 공식 mongo 트레이닝을 통해 mongo를 배운다면m001-mongodb-basicsdb의 패스워드로 사용합니다.올바른 DB 이름은 샌드박스입니다(모든 단계를 수행한 경우).

최근에 이런 일이 있었는데, 최근에 Mongo DB 비밀번호를 업데이트해도 이전 데이터베이스가 여전히 이전 비밀번호를 사용하고 있다는 것을 알게 되었습니다.

Mongo DB 계정에 새 사용자를 추가하거나 기존 비밀번호를 사용하면 이 문제를 해결할 수 있습니다.

  1. 왼쪽 데이터베이스로 이동
  2. 브라우즈 컬렉션을 클릭
  3. [ Add My Own Data ]을 클릭합니다.
  4. 데이터베이스 이름 및 컬렉션 이름 제공
  5. 데이터베이스를 다시 클릭합니다.
  6. connect를 클릭하여 응용 프로그램을 연결합니다.
  7. node.js를 선택합니다.
  8. 접속 문자열을 복사하여 서버에 보관합니다.caper 9) 데이터베이스 액세스 클릭, 비밀번호 편집, 비밀번호 자동 생성
  9. 마우스로 비밀번호를 복사하고 [사용자 갱신]을 클릭합니다.
  10. url 문자열을 이 비밀번호로 바꾸면 완료됩니다.

언급URL : https://stackoverflow.com/questions/55695565/error-message-mongoerror-bad-auth-authentication-failed-through-uri-string