Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Current »

Problem

In our Node.js applications, we use passport-ldapauth library to authenticate\retrieve the user info.  

In the returned user object, the thumbnailPhoto field cannot be displayed as an image in HTML. It is because the ldapjs library convert all types of attributes as string. 

Solution

In the file node_modules\ldapjs\lib\messages\search_entry.js, replace 

if (a.vals && a.vals.length) {
  if (a.vals.length > 1) {
    obj[a.type] = a.vals.slice();
  } else {
    obj[a.type] = a.vals[0];
  }
} else {
  obj[a.type] = [];
}

as

var buf = a.buffers;
var val = a.vals;
var item;
if ( a.type == 'thumbnailPhoto' )
    item = buf;
else
    item = val;
if (item && item.length) {
    if (item.length > 1) {
        obj[a.type] = item.slice();
    } else {
        obj[a.type] = item[0];
    }
} else {
    obj[a.type] = [];
}


Then, overwrite the thumbnailPhoto attribute to be a string used in <img src='{thumbnailPhoto}'>:


router.post('/login',
    passport.authenticate('ldapauth'),
    (req, res) => {
        req.user.thumbnailPhoto = 'data:image/jpeg;base64,' + Buffer.from(req.user.thumbnailPhoto).toString('base64');
        res.render('profile', req.user);
    });

https://github.com/joyent/node-ldapjs/issues/137




  • No labels