如何使用 passport-ldapauth 库在 Nestjs 应用程序中使用动态 ldap 配置选项?
Posted
技术标签:
【中文标题】如何使用 passport-ldapauth 库在 Nestjs 应用程序中使用动态 ldap 配置选项?【英文标题】:How to use dynamic ldap config options in a Nestjs app using passport-ldapauth library? 【发布时间】:2021-01-03 18:20:29 【问题描述】:我正在尝试在 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
提取到在此类之外声明的常量或函数,然后将其传递给super
?我看不出它需要成为类方法的任何理由
@Jesse Carter 谢谢你的工作,愚蠢的错误......请添加这个作为答案。
不错!很高兴它有所帮助。让我总是搞砸这样的事情是一个容易的错误
【参考方案1】:
您可以将getLdapConfig
提取到类外部声明的常量(箭头函数)或常规函数,然后将其传递给super
调用。
它本身不引用任何类成员,因此没有理由需要它是类方法。
【讨论】:
以上是关于如何使用 passport-ldapauth 库在 Nestjs 应用程序中使用动态 ldap 配置选项?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用`openpyxl`库在Excel中的合并单元格中写入?
如何使用 Retrofit 库在 Android 中下载文件?
如何使用 reactstrap 库在 React 中设置发布表单?
如何使用 Appium 库在我的代码中使用 javascript