当前位置: 首页 > news >正文

电子商务网站怎么做素材包电商思维做招聘网站

电子商务网站怎么做素材包,电商思维做招聘网站,wordpress第三方源码,河南比较出名的外贸公司在前面的两篇文章中#xff0c;我详细的介绍了使用ldap与window AD服务集成#xff0c;实现ToB项目中的身份认证集成方案#xff0c;包括技术方案介绍、环境配置#xff1a; ToB项目身份认证AD集成#xff08;一#xff09;#xff1a;基于目录的用户管理、LDAP和Active…在前面的两篇文章中我详细的介绍了使用ldap与window AD服务集成实现ToB项目中的身份认证集成方案包括技术方案介绍、环境配置 ToB项目身份认证AD集成一基于目录的用户管理、LDAP和Active Directory简述 ToB项目身份认证AD集成二一分钟搞定window server 2003部署AD域服务并支持ssl加密多图保姆教程证书脚本 在本文中我将详细介绍如何利用 ldapjs 库使之一个 Node.js 服务类 LdapService该类实现了与 之前搭建的Windows AD 交互包括用户搜索、身份验证、密码修改等功能。 也算是AD集成系列的完结吧后续可能出其它客户端的对接但目前工作核心在AI那块儿大概率也不会继续了 一、实现方案和LdapService类概述 LdapService 类的核心是通过 LDAP轻量级目录访问协议与 AD 进行交互提供用户搜索、认证、密码修改、重置等功能。下图是该类的基本结构后续将一步步的介绍如何实现各个方法。 class LdapService {client: Promiseldap.Client;private config: MustPropertyLdapServiceConfig;constructor(config: LdapServiceConfig) {this.config {...defaultConfig,...config,};this.client this.init();}async findUsers(filter this.config.userSearchFilter,attributes: string[] [sAMAccountName, userPrincipalName, memberOf]) {}// 关闭连接async close() {(await this.client).destroy();}async findUser() {}// 修改用户密码的方法async changePassword(user: LdapUserSimInfo,newPassword: string,oldPassword: string) {}// 用户认证的方法 - 检查密码是否正确async checkPassword(user: LdapUserSimInfo, password: string) {}/*重置密码 */async resetPassword(user: LdapUserSimInfo, resetPassword: string) {}private async init() {const conf this.config;const client ldap.createClient({url: conf.url,tlsOptions: {minVersion: TLSv1.2,rejectUnauthorized: false,},});await promisify(client.bind).call(client, conf.adminDN, conf.adminPassword);return client; // 返回绑定后的客户端}private mergeSearchEntryObjectAttrs(entry: ldap.SearchEntryObject) {}private doSearch(client: ldap.Client, opts: ldap.SearchOptions) {}private encodePassword(password) {}private safeDn(dn: string) {} }二、中文字段的特殊patch ldap.js对于数据的字段进行了escape操作会导致中文输入被转化成\xxx的形式无论是接收的数据还是发送的请求这时候会导致cn包含中文会出现错。需要用如下方法进行patch通过在出现问题的rdn上配置unescaped参数控制是否对字符串进行escape如果不知道啥是escape参见十六进制转义escape介绍 const oldString ldap.RDN.prototype.toString; ldap.RDN.prototype.toString function () {return oldString.call(this, { unescaped: this.unescaped }); };加了这个补丁后就可以控制rdn的转义情况了。 三、用户搜索功能 findUsers() 方法用于在 AD 中搜索用户返回用户的基本信息。 async findUsers(filter this.config.userSearchFilter,attributes: string[] [sAMAccountName, userPrincipalName, memberOf] ): PromiseLdapUserSimInfo[] {await this.bindAsAdmin();const opts {filter, scope: sub, attributes: Array.from(new Set([distinguishedName, cn].concat(attributes))),};const searchResult await this.doSearch(await this.client, opts);return searchResult.map((user) {return this.mergeSearchEntryObjectAttrs(user) as LdapUserSimInfo;}); }filter 是用于搜索的 LDAP 过滤器默认为查找所有用户的 (objectClassuser) 过滤器。attributes 参数允许指定返回哪些用户属性默认返回 sAMAccountName、userPrincipalName 和 memberOf 等属性。该方法调用了 doSearch() 进行搜索并通过 mergeSearchEntryObjectAttrs() 整理和转换 AD 返回的用户数据。 doSearch() 方法是实际进行 LDAP 搜索的地方 private doSearch(client: ldap.Client, opts: ldap.SearchOptions) {return new Promiseldap.SearchEntryObject[]((resolve, reject) {const entries [] as ldap.SearchEntryObject[];client.search(this.config.userSearchBase, opts, (err, res) {if (err) {return reject(err);}res.on(searchEntry, (entry) {entries.push(entry.pojo);});res.on(end, (result) {if (result?.status ! 0) {return reject(new Error(Non-zero status from LDAP search: ${result?.status}));}resolve(entries);});res.on(error, (err) {reject(err);});});}); }client.search() 是 ldapjs 提供的一个方法用于执行搜索操作。搜索结果通过事件 searchEntry 逐条返回最终在 end 事件时完成。 四、用户认证功能 checkPassword() 方法用于用户身份验证检查用户输入的密码是否正确。 async checkPassword(user: LdapUserSimInfo, password: string) {const userDN user.objectName;const client await this.client;await promisify(client.bind).call(client, userDN, password); }通过 LDAP 的 bind() 方法可以尝试使用用户的 DN 和密码进行绑定。如果绑定成功表示密码正确否则会抛出错误表示认证失败。 五、密码修改功能 changePassword() 方法允许用户修改自己的密码。 async changePassword(user: LdapUserSimInfo, newPassword: string, oldPassword: string) {await this.bindAsAdmin();const userDN this.safeDn(user.objectName);const changes [new ldap.Change({operation: delete,modification: new ldap.Attribute({type: unicodePwd,values: [this.encodePassword(oldPassword)],}),}),new ldap.Change({operation: add,modification: new ldap.Attribute({type: unicodePwd,values: [this.encodePassword(newPassword)],}),}),];const client await this.client;await promisify(client.modify).call(client, userDN, changes); }在修改密码时LDAP 需要先删除旧密码再添加新密码。这里使用 ldap.Change 创建修改操作通过 client.modify() 方法应用到 AD。 六、密码重置功能 resetPassword() 方法允许管理员重置用户的密码 async resetPassword(user: LdapUserSimInfo, resetPassword: string) {await this.bindAsAdmin();const client await this.client;const userDN this.safeDn(user.objectName);const changes new ldap.Change({operation: replace,modification: new ldap.Attribute({type: unicodePwd,values: [this.encodePassword(resetPassword)],}),});await promisify(client.modify).call(client, userDN, changes); }与修改密码不同重置密码直接使用 replace 操作替换用户的现有密码。 七、结语 通过对 LdapService 类的逐步解析相信你已经学会了如何利用 ldapjs 库与 Windows AD 进行交互。在实际使用中还可以根据业务需求对这个类进行扩展从而满足大规模企业系统中的用户管理需求。 另外这个中文的问题暂时还只能是如此打补丁期待社区修复可能不会那么及时
http://www.w-s-a.com/news/76066/

相关文章:

  • 电商网站设计图片素材p2p网站建设石家庄
  • 莲塘网站建设如何文字推广一个婚恋网站
  • 医院网站建设工作汇报WordPress不发邮件了
  • 怎么做外语网站个人网页设计作品ps
  • 网站原型怎么做vps如何建两个网站
  • 商城网站建设源码嘉兴seo计费管理
  • 城乡建设网站证件查询系统wordpress 时间代码
  • php网站建设 关键技术做网站哪家正规
  • 网站开发用什么写得比较好谷歌的英文网站
  • 青岛网站建设公司在哪vivo手机商城
  • 兼职刷客在哪个网站做哪个网站做淘宝客
  • 眼科医院网站开发网络营销特点是什么
  • 提交网站给百度增加wordpress插件
  • 网站建设企业官网体验版是什么Wordpress哪个模板最快
  • 美丽说网站模板湖北可以做网站方案的公司
  • 北京西站进站最新规定建设网站的提成是多少
  • wordpress站点如何加速网站建设描述怎么写
  • 如何免费建造网站免费vi模板网站
  • 商丘做网站多少钱扬州大发网站建设
  • 网站建设哪家性价比高自己做项目的网站
  • 成立一个网站济宁营销型网站建设
  • 南通购物网站建设设计类平台网站
  • 专业网站建设咨询thinkphp网站源码下载
  • 怎么制作一个国外网站网站推广找哪家公司好
  • 免费做网站怎么做网站想在网上卖东西怎么注册
  • 淘宝网站建设的策划书网投怎么做网站
  • 如何免费做公司网站视频网站开发视频
  • 网站后台是怎么更新wordpress 大于2m的xm
  • 制作网页设计软件列表案例营销网站优化seo
  • 住房和建设建设局网站报告长官夫人在捉鬼