-
Notifications
You must be signed in to change notification settings - Fork 474
Invalidate Error #961
Description
I think there issue it's a bit old on #873, but somehow I met a similar problems when I tried to write an helper (service) in NestJS.
This issue not came after every restart until it hit a certain interval.
My issue related to credentials validation to Microsoft AD which just went success whatever the password with just a correct dn.
AFAIK, other teams working with this AD were using php which only validate once and flush the client and I assumed with hanging connection like this on JS had some problems.
Minimal reproduction
First, I import Client and make an variable to containing the ldapjs client
import { Client, SearchEntry, createClient } from 'ldapjs'
export class LdapService implements OnApplicationBootstrap {
private auth: Client
}
then I add function that run everytime the NestJS is started (or restart) to initiate the client
async onApplicationBootstrap() {
const ldapOptions = {
url: LDAP_URL,
reconnect: true,
}
this.auth = createClient(ldapOptions)
this.auth.on('connectError', (err) => {
this.logger.warn(`Auth ${err}`)
})
this.auth.on('error', (err) => this.logger.error(`Auth ${err}`))
}
Finally I had an function to verify dn and password by bind
async authenticateLdap(dn, password): Promise <boolean> {
return new Promise((resolve) => {
this.auth.bind(dn, password, (err) => {
if (err) {
// Bind failed
resolve(false)
} else {
// Bind was successful, immediately unbind for next user authentication
this.auth.unbind()
resolve(true)
}
})
})
}
I tried to unbind immediately after it succesfully binded
However in about several minutes later it came an error Client Error: read ECONNRESET
which returned by this listener
this.auth.on('error', (err) => this.logger.error(`Auth ${err}`))
Originally posted by @Fray117 in #873 (comment)