Node-redis: Otentikasi NOAUTH diperlukan kesalahan bahkan dengan set kata sandi

Dibuat pada 29 Jun 2018  ·  18Komentar  ·  Sumber: NodeRedis/node-redis

  • Versi : Node Redis 2.8.0 / Redis 4.0.9
  • Platform : NodeJS 8.11.3 pada tumpukan Heroku-16
  • Deskripsi : Saya terhubung ke redis dan meneruskan objek opsi berikut yang memiliki kata sandi tetapi node_redis selalu memunculkan kesalahan NOAUTH
options = {
   'auth_pass': nconf.get('redis_pass')[nodeEnv],
   'no_ready_check': true,
};

Jika saya terhubung ke redis dengan alat redis-cli itu berfungsi dengan baik tetapi untuk beberapa alasan saya mendapatkan kesalahan ini

29 Jun 2018 11:06:14.626136 <190>1 2018-06-29T18:06:14.346750+00:00 app web.1 - - ReplyError: NOAUTH Authentication required
    at new Command (/app/node_modules/redis/lib/command.js:12:22)
    at RedisClient.info (/app/node_modules/redis/lib/individualCommands.js:169:39)
    at RedisClient.ready_check (/app/node_modules/redis/index.js:534:10)
    at RedisClient.on_connect (/app/node_modules/redis/index.js:428:14)
    at Socket.<anonymous> (/app/node_modules/redis/index.js:268:14)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:111:20)
    at Socket.emit (events.js:208:7)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1173:10)Exception

Komentar yang paling membantu

Saya juga mengalami masalah ini di sini.

Pesan kesalahan: ReplyError: NOAUTH Authentication required.

Versi : Node Redis 3.0.0 / Redis 5.0.8

Semua 18 komentar

Sulit untuk membedakan hanya dari objek options Anda, tetapi ini cukup standar dan dikenal baik. Jika saya harus bertaruh Anda mungkin terhubung ke server redis yang salah atau nconf.get('redis_pass')[nodeEnv] memberikan kata sandi yang salah (atau mungkin tidak terdefinisi).

Bisakah Anda memberikan lebih banyak kode Anda?

Hai, Saya memiliki masalah yang sama dan saya memberikan kata sandi sebagai teks biasa dan masih mengirimi saya kesalahan yang sama. Sebenarnya saya hanya menghapus komentar pada baris requirepass di file redis.conf default, seperti yang saya tunjukkan pada kode berikut:

# use a very strong password otherwise it will be very easy to break.
#
requirepass foobared

# Command renaming.

Saya membuat konfigurasi ini di mesin lokal saya untuk melakukan tes, tetapi saya masih mendapatkan kesalahan yang sama:

events.js:160
      throw er; // Unhandled 'error' event
      ^
ReplyError: Ready check failed: NOAUTH Authentication required.
    at parseError (/home/mauricio/Documents/lisapp/pos_lisa/node_modules/redis/node_modules/redis-parser/lib/parser.js:193:12)
    at parseType (/home/mauricio/Documents/lisapp/pos_lisa/node_modules/redis/node_modules/redis-parser/lib/parser.js:303:14)

Ini kode saya yang saya terapkan di server nodejs saya:

const redisPassword = "foobared" ; 
const ClientRedisApi = redis.createClient({
          host : '127.0.0.1',  
          no_ready_check: true,
          auth_pass: redisPassword,                                                                                                                                                           
});                               

ClientRedisApi.on('connect', () => {   
          global.console.log("connected");
})                              

ClientRedisApi.on('error', err => {       
          global.console.log(err.message)
})                             

ClientRedisApi.set("foo", 'bar');         

ClientRedisApi.get("foo", function (err, reply) {
        global.console.log(reply.toString())
})

Yang lucu adalah ketika saya memulai server, kunci "foo" disimpan di database redis saya dengan nilai "bar", tetapi aplikasi saya mogok dan saya tidak dapat melakukan apa pun untuk berinteraksi dengannya.

Untuk semua orang di sini. Saya memiliki masalah yang sama ketika saya mencoba menggunakan kata sandi panjang yang dihasilkan oleh generator kata sandi acak Linux. Ketika saya mengubah kata sandi menjadi sesuatu yang jauh lebih pendek, semuanya bekerja dengan baik. Ini mungkin masalah dengan paket Node.JS ini sendiri, karena kata sandi yang panjang berhasil jika saya masuk ke redis-cli dan menggunakannya dengan perintah auth . Namun, kata sandi yang sama persis tidak berfungsi saat diteruskan selama metode createClient() , terlepas dari varian metode apa yang saya gunakan (yaitu - URL lengkap, atau "auth_pass"/"password" di blok opsi, atau redisClient.auth() metode - semuanya gagal dengan kata sandi yang panjang).

Hai @roschler , apakah Anda ingin memberikan kode Anda. Yang benar adalah saya mencoba saran Anda dan saya masih mengalami masalah yang sama, bahkan dengan kata sandi seperti '123'. Saya mencoba dengan semua cara yang ada di dokumentasi dan tidak ada yang berbeda. Saya tahu ini bisa mengganggu Anda, tetapi kenyataannya saya tidak punya pilihan lain. Sebelumnya terima kasih banyak.

@maooricio Saya 99,999% yakin ini adalah kesalahan konfigurasi di server atau server yang salah. Melihat kode Anda dari Oktober 2018, saya akan mencoba menggunakan kunci yang dibuat secara acak dan bergema dengan MONITOR di redis-cli .

Saya pikir @roschler mengalami masalah yang sama sekali berbeda (mengutip?)

Saya masih mengalami masalah ini dengan saya. Saya telah mencoba banyak cara berbeda untuk terhubung dengan redis db saya tetapi otentikasi kata sandi gagal untuk pengguna

@nicollasmatheus apa kesalahan Anda?

Saya mengalami kesalahan yang sama. Saya yakin semua parameter pengaturan sudah benar. Saya sudah mencoba semua 3 metode dan kesalahan yang sama di semuanya.

      // First method
      const client = redis.createClient(process.env.REDIS_PORT, process.env.REDIS_HOST);
      client.auth(process.env.REDIS_PASSWORD);

      // Second method
      const client = redis.createClient(process.env.REDIS_PORT, process.env.REDIS_HOST, {
        password: process.env.REDIS_PASSWORD
      });

      // Third method
      const client = redis.createClient(uri)

Setelah pengaturan NODE_DEBUG=redis

[0] Sending auth to redis:6379 id 0
[0] Send redis:6379 id 0: *2
[0] $4
[0] auth
[0] $14
[0] mypassword
[0]
[0] Stream connected redis:6379 id 0
[0] Redis: CONNECTED // CUSTOM MESSAGE
[0] Checking server ready state...
[0] Send redis:6379 id 0: *1
[0] $4
[0] info
[0]
[0] Net read redis:6379 id 0
[0] Redis server ready.
[0] on_ready called redis:6379 id 0
[0] Redis: READY // CUSTOM MESSAGE
[0] Stream connected redis:6379 id 1
[0] Checking server ready state...
[0] Send redis:6379 id 1: *1
[0] $4
[0] info
[0]
[0] Net read redis:6379 id 1
[0]
[0] /app/node_modules/redis/lib/command.js:12
[0]         this.error = new Error();
[0]                      ^
[0] ReplyError: NOAUTH Authentication required.
[0]     at new Command (/app/node_modules/redis/lib/command.js:12:22)
[0]     at RedisClient.info (/app/node_modules/redis/lib/individualCommands.js:169:39)
[0]     at RedisClient.ready_check (/app/node_modules/redis/index.js:534:10)
[0]     at RedisClient.on_connect (/app/node_modules/redis/index.js:428:14)
[0]     at Socket.<anonymous> (/app/node_modules/redis/index.js:268:14)
[0]     at Object.onceWrapper (events.js:299:28)
[0]     at Socket.emit (events.js:215:7)
[0]     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1115:10)
[0] npm ERR! code ELIFECYCLE

Saya menggunakan komposisi buruh pelabuhan

  redis:
    container_name: redis
    image: redis:5.0.3-alpine
    restart: always
    env_file: .env
    command: ["redis-server", "--appendonly", "yes", "--requirepass", "${REDIS_PASSWORD}"]
    hostname: ${REDIS_HOST}
    volumes:
      - ~/.mydata/redis:/data
    ports:
      - ${REDIS_PORT}:6379
    networks:
      - my-network

dan saya dapat mengakses redis menggunakan cli redis-cli -h 127.0.0.1 -p 6379 -a 'mypassword'

@thellimist Lihat apa yang terjadi dengan redis-cli dan MONITOR , terutama dengan metode kedua Anda.

@stockholmux

export default class Cache {
   static client: any

   static init(): Promise<any> {
      if (Cache.client) {
        logger.error("Client already exists")
        return new Promise((resolve, reject) => { reject() });
      }

      const client = redis.createClient(process.env.REDIS_PORT, process.env.REDIS_HOST, {
        password: process.env.REDIS_PASSWORD
      });
      Cache.client = asyncRedis.decorate(client);
      Cache.client.monitor(function (err, res) {
        logger.info("Entering monitoring mode.");
      });
      Cache.client.set('foo', 'bar');

      Cache.client.on("ready", (e: any) => {
        logger.info(`ready ${e}`);
      });

      Cache.client.on("reconnecting", (e: any) => {
        logger.info(`reconnecting ${e}`);
      });

      Cache.client.on("end", (e: any) => {
        logger.info(`end ${e}`);
      });

      Cache.client.on("warning", (e: any) => {
        logger.info(`warning ${e}`);
      });

      Cache.client.on("monitor", (e: any, res: any) => {
        logger.error(`monitor err: ${e}`);
        logger.info(`monitor res: ${res}`);
      });

      Cache.client.on("connect", () => {
        logger.info("connected");
      });
      Cache.client.on("error", (e: any) => {
        logger.error(`Error: :${e}`);
      });

      return new Promise((resolve, reject) => { resolve() }
   }

dan saya sebut await Cache.init() . Tanggapan berikut ini:

[0] Sending auth to redis:6379 id 0
[0] Send redis:6379 id 0: *2
[0] $4
[0] auth
[0] $14
[0] mypassword
[0]
[0] Queueing monitor for next server connection.
[0] Queueing set for next server connection.
[0] Stream connected redis:6379 id 0
[0] 2019-12-17 06:49:48 error [server.ts]: connected
[0] Checking server ready state...
[0] Send redis:6379 id 0: *1
[0] $4
[0] info
[0]
[0] Net read redis:6379 id 0
[0] Redis server ready.
[0] on_ready called redis:6379 id 0
[0] Sending offline command: monitor
[0] Send redis:6379 id 0: *1
[0] $7
[0] monitor
[0]
[0] Sending offline command: set
[0] Send redis:6379 id 0: *3
[0] $3
[0] set
[0] $3
[0] foo
[0] $3
[0] bar
[0]
[0] 2019-12-17 06:49:48 info [server.ts]: ready undefined
[0] Net read redis:6379 id 0
[0] 2019-12-17 06:49:48 info [server.ts]: Entering monitoring mode.
[0] 2019-12-17 06:49:48 error [server.ts]: monitor err: 1576565388.385183
[0] 2019-12-17 06:49:48 info [server.ts]: monitor res: set,foo,bar
[0] Stream connected redis:6379 id 1
[0] Checking server ready state...
[0] Send redis:6379 id 1: *1
[0] $4
[0] info
[0]
[0] Net read redis:6379 id 1
[0]
[0] /app/node_modules/redis/lib/command.js:12
[0]         this.error = new Error();
[0]                      ^
[0] ReplyError: NOAUTH Authentication required.
[0]     at new Command (/app/node_modules/redis/lib/command.js:12:22)
[0]     at RedisClient.info (/app/node_modules/redis/lib/individualCommands.js:169:39)
[0]     at RedisClient.ready_check (/app/node_modules/redis/index.js:534:10)
[0]     at RedisClient.on_connect (/app/node_modules/redis/index.js:428:14)
[0]     at Socket.<anonymous> (/app/node_modules/redis/index.js:268:14)
[0]     at Object.onceWrapper (events.js:299:28)
[0]     at Socket.emit (events.js:215:7)
[0]     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1115:10)

Juga kunci/val "foo: bar" ditambahkan ke redis. Jadi itu terhubung dengan benar pada awalnya kemudian untuk beberapa alasan ia mencoba untuk menyambung kembali tetapi gagal. Saya hanya menelepon await Cache.init() sekali di server ekspres.

@thellimist Saya pikir Anda salah paham - Anda perlu menjalankan MONITOR _from_ redis-cli untuk mendiagnosis masalah ini dengan benar. Menjalankannya dari dalam aplikasi Anda seperti di atas tidak akan menangkap otentikasi (karena itu terjadi sebelum MONITOR). Saya juga akan menjalankannya pada DB yang benar-benar memerah.

Bagaimanapun, melihat kode Anda (yang saya anggap sebagai cuplikan), itu benar-benar terlihat seperti di tempat lain dalam kode Anda yang Anda panggil redis.createClient tanpa kata sandi yang tepat (bahkan mungkin modul lain). Saya tidak melihat log debug untuk koneksi ulang dan id 1 mengatakan Anda sedang mengerjakan aliran jaringan yang berbeda.

@stockholmux

Masalahnya sederhana seperti yang Anda katakan. Saya menggunakan paket typeorm dan memiliki file konfigurasi berbeda yang tidak ada dalam file js/ts. Loge Node Redis tidak memberi tahu saya dari mana itu dipanggil sehingga sulit ditemukan.

Terima kasih.

Jika menggunakan Docker, edit pengaturan jaringan file redis.conf Anda:

bind 0.0.0.0

Itu memperbaikinya untuk saya.

@mariothedev berhati-hatilah dengan itu. Tanpa firewall yang tepat, redis Anda terbuka lebar dengan menggunakan pengaturan bind itu.

@stockholmux - terima kasih telah memberi tahu saya :)

Saya juga mengalami masalah ini di sini.

Pesan kesalahan: ReplyError: NOAUTH Authentication required.

Versi : Node Redis 3.0.0 / Redis 5.0.8

Datang di utas ini mencari jawaban untuk masalah yang sama. Bingung apa solusi untuk ini.

Satu lagi kemungkinan resolusi untuk ditambahkan ke daftar. Saya mendapatkan kesalahan ini dan saya butuh waktu lama untuk mengingat bahwa saya menggunakan Bull yang merupakan antrian berbasis Redis. Saya juga menggunakan Redis di tempat lain di aplikasi tempat saya menyampaikan informasi koneksi, tetapi lupa tentang Bull dan mendapatkan kesalahan ini di konsol.

Jadi saya kira satu hal lain yang perlu diperiksa adalah apakah ada hal lain di aplikasi Anda yang menggunakan Redis dan mungkin memicu kembali kesalahan ini.

edit Jika Bull yang menyebabkan kesalahan ini untuk Anda, Anda harus menggunakan password di objek koneksi redis Anda, bukan auth_pass .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat