Promises would make sense to me, but first step would be to extract stuff into functions.
You don't really need promises for this, though. Here's one way to just do it with plain callbacks:
exports.auth = (request, response, next) ->
getUsername = (request, cb) ->
email = request.body.email
return cb null, request.body.username unless request.body.email
users.findByEmail request.body.email, (error, result) ->
return cb new InternalServerError(error) if error
cb null, result[0].username
authenticate =getUsername (err, username) ->
return next err if err
auth.auth username, request.body.password, (errorerr, resultjson) ->
return next new InternalServerError(error)err if errorerr
response.json responseData
getUsername (err, username) ->
return next err if err
authenticate usernamejson