2013-12-12 4 views
0

У меня есть приложение рабочего узла, где мне нужно подключиться к различным БД на основе того, что пользователь подключается к приложению через basicAuth.NodeJS express basicAuth - как передать имя пользователя функции маршрута?

Вот пример:

// Authenticating function 
var sgAuth = express.basicAuth(function(user, pass, callback){ 
    if(config.credentials.clients[user] === undefined) { 
    callback(null, false); 
    } else { 
    callback(null, config.credentials.clients[user].password == pass); 
    } 
}); 

// This function needs to know what user has authenticated 
function putEvents(req, res) { 
    //How do I know what user authenticated in this request? 
    var authUser = ???; 
    var table = getUserTable(authUser); 
    ... 
} 
app.post('/put', sgAuth, putEvents); 

Сохранение имени пользователя в sgAuth в какой-то вар, конечно, не будет работать, потому что может быть много входящих соединений от различных пользователей, так что вы не можете гарантировать, что его тот же пользователь , правильно? Может ли эта информация быть извлечена из заголовка запроса каким-то образом?

ответ

2

basicAuth() middleware установит req.user и req.remoteUser после разрешения.

Хотя, обратите внимание, что 2-й аргумент обратного вызова должен быть user, а не просто authorized булевым. Но, это может быть любое правдой ценность, которую вы желаете, в том числе имя user.

callback(null, config.credentials.clients[user].password == pass ? user : null); 

После этого, вы должны быть в состоянии получить его с помощью:

var authUser = req.user; 
+0

Doh, я буквально просто заметил, что я должен возвращать имя пользователя! :) 'callback (null, config.credentials.clients [user] .password == pass? user: false)' –

+0

Могу ли я спросить, в чем цель utils.pause? –

+0

@KatyaS [Кажется, это] (https://github.com/senchalabs/connect/blob/2.12.0/lib/utils.js#L239-L266) обратная совместимость ['readable.pause()' ] (https://github.com/senchalabs/connect/blob/2.12.0/lib/utils.js#L239-L257), который предотвращает 'req' от потоковой передачи данных (любого содержимого тела) во время ожидания «обратный вызов». –

0

Обратите внимание, что: BasicAuth осуждается

Вот код:

app.use(express.basicAuth(function(user, pass, callback){ 
    if(config.credentials.clients[user] === undefined) { 
    callback('user not found!!!'); 
    } else { 
    if(config.credentials.clients[user].password === pass) { 
     callback(null, config.credentials.clients[user]); 
    } else { 
     callback('wrong pass!!!'); 
    } 
    } 
}); 

app.post('/put', function putEvents(req, res) { 
    console.log(req.user.name) 
    res.end(); 
}); 
+0

Устаревшие? Хм, нужно будет исследовать. Спасибо за ваш ответ! –

+0

@KatyaS Это устарело, но, по-видимому, его не планируется удалять. [Источник] (https://github.com/senchalabs/connect/blob/2.12.0/lib/middleware/basicAuth.js#L18-L20). Хотя автор по-прежнему рекомендует использовать ['basic-auth'] (https://npmjs.org/package/basic-auth). –

Смежные вопросы