Есть ли какие-либо существующие библиотеки аутентификации пользователя для node.js? В особенности я ищу что-то, что может сделать аутентификацию по паролю для пользователя (использующий пользовательского автора бэкенда DB), и партнер что пользователь с сессией.
Прежде чем я записал подлинную библиотеку, я полагал, что буду видеть, знали ли люди о существующих библиотеках. Ничто не мог найти очевидным через поиск Google.
- Shreyas
Похоже, плагин connect-auth для промежуточного ПО подключения - это именно то, что мне нужно: http://wiki.github.com/ciaranj/connect-auth/creating-a- стратегия на основе форм
Я использую express [ http://expressjs.com ], поэтому подключаемый модуль подключения очень хорошо подходит, поскольку express является подклассом (хорошо - прототипом) из connect
Вот код для базовой аутентификации из одного из моих проектов. Я использую его против CouchDB с дополнительным кешем данных аутентификации, но я удалил этот код.
Оберните метод аутентификации вокруг обработки запроса и предоставьте второй обратный вызов для неудачной аутентификации. Обратный вызов успеха получит имя пользователя в качестве дополнительного параметра. Не забудьте правильно обрабатывать запросы с неправильными или отсутствующими учетными данными в обратном вызове ошибки:
/**
* Authenticate a request against this authentication instance.
*
* @param request
* @param failureCallback
* @param successCallback
* @return
*/
Auth.prototype.authenticate = function(request, failureCallback, successCallback)
{
var requestUsername = "";
var requestPassword = "";
if (!request.headers['authorization'])
{
failureCallback();
}
else
{
var auth = this._decodeBase64(request.headers['authorization']);
if (auth)
{
requestUsername = auth.username;
requestPassword = auth.password;
}
else
{
failureCallback();
}
}
//TODO: Query your database (don't forget to do so async)
db.query( function(result)
{
if (result.username == requestUsername && result.password == requestPassword)
{
successCallback(requestUsername);
}
else
{
failureCallback();
}
});
};
/**
* Internal method for extracting username and password out of a Basic
* Authentication header field.
*
* @param headerValue
* @return
*/
Auth.prototype._decodeBase64 = function(headerValue)
{
var value;
if (value = headerValue.match("^Basic\\s([A-Za-z0-9+/=]+)$"))
{
var auth = (new Buffer(value[1] || "", "base64")).toString("ascii");
return {
username : auth.slice(0, auth.indexOf(':')),
password : auth.slice(auth.indexOf(':') + 1, auth.length)
};
}
else
{
return null;
}
};