如何解决如何使用通行证-ldapauth库在Nestjs应用中使用动态ldap配置选项?
我正在尝试在Nestjs应用中使用passport-ldapauth针对活动目录进行身份验证。我没有服务帐户,想使用用户名DN绑定到Active Directory。我试图使用异步配置检索,但是在策略类的构造函数中调用super()时遇到问题。
我收到以下错误:
src / ldap.strategy.ts:12:9-错误TS17009:在派生类的构造函数中访问“ this”之前,必须先调用“ super”。 12超级(this.getLdapConfig,
有什么想法可以通过扩展策略接口/在调用super()时传递动态配置方法来使它在Nestjs应用中实现吗?
我的代码:
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: `(&(&(objectClass=person)(objectClass=user))(sAMAccountName=${req.username}))`
searchAttributes: ['displayName','mail'],}
};
callback(null,opts);
});
}
}
解决方法
您可以将getLdapConfig
提取到在类外部声明的const(箭头函数)或常规函数中,然后将其传递到super
调用中。
它没有引用任何类成员本身,因此没有理由需要它是一个类方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。