#node.js #typescript #ldap #passport.js #nestjs
#node.js #typescript #ldap #passport.js #nestjs
Вопрос:
Я пытаюсь пройти аутентификацию в Active Directory с использованием passport-ldapauth в приложении Nestjs. У меня нет учетной записи службы, и я хочу привязаться к Active Directory, используя имя пользователя в качестве DN. Я пытаюсь использовать асинхронный поиск конфигурации, но сталкиваюсь с проблемой при вызове super() в конструкторе класса strategy.
Я получаю следующую ошибку:
src/ldap.strategy.ts:12:9 — ошибка TS17009: ‘super’ должен быть вызван перед доступом к ‘this’ в конструкторе производного класса. 12 супер (this.getLdapConfig,
Есть идеи, как я могу заставить это работать в приложении Nestjs, расширив интерфейс стратегии / передав метод динамической конфигурации при вызове super()?
мой код:
import * as Strategy from 'passport-ldapauth';
import { PassportStrategy } from '@nestjs/passport';
import { Injectable, UnauthorizedException } from '@nestjs/common';
import { Request } from 'express';
import { readFileSync } from 'fs';
import { callbackify } from 'util';
@Injectable()
export class LdapStrategy extends PassportStrategy(Strategy, 'ldap') {
constructor(
) {
super(this.getLdapConfig,
async (req: Request, user: any, done) => {
console.log(req);
req.user = user;
return done(null, user);
});
}
getLdapConfig(req: Request, callback: any) {
process.nextTick(() => {
let opts = {
passReqToCallback: true,
server: {
url: 'ldaps://eassec.cc.corp:636',
bindDN: `CN=${req.username}`,
bindCredentials: '${req.password}',
tlsOptions: {
ca: [
readFileSync('./src/public.crt')
],
rejectUnauthorized: false
},
searchBase: 'ou=BU-IT',
searchFilter: `(amp;(amp;(objectClass=person)(objectClass=user))(sAMAccountName=${req.username}))`
searchAttributes: ['displayName', 'mail'],
}
};
callback(null, opts);
});
}
}
Комментарии:
1. Вы пробовали извлекать
getLdapConfig
из const или функции, объявленной вне этого класса, а затем передавать ее вsuper
? Я не вижу причин, по которым это должен быть метод класса2. @Jesse Carter спасибо, что сработало, глупая ошибка… Пожалуйста, добавьте это в качестве ответа.
3. Приятно! Рад, что это помогло. Это простая ошибка, которую я все время облажаюсь с такими вещами
Ответ №1:
Вы могли бы просто извлечь getLdapConfig
const (функцию со стрелкой) или обычную функцию, объявленную вне класса, а затем передать ее в super
вызов.
Он сам не ссылается ни на какие члены класса, поэтому нет причин, по которым он должен быть методом класса.