Соединение / экспресс по запросу промежуточное ПО где-то не работает - PullRequest
3 голосов
/ 16 апреля 2011

Я пытаюсь создать очень простое промежуточное программное обеспечение Basic Auth для Express на Node.js, как показано здесь: http://node -js.ru / 3-writing-express-middleware

У меня есть функция промежуточного программного обеспечения:

var basicAuth = function(request, response, next) {
    if (request.headers.authorization && request.headers.authorization.search('Basic ') === 0) {
        // Get the username and password
        var requestHeader = new Buffer(
                request.headers.authorization.split(' ')[1], 'base64').toString();
        requestHeader = requestHeader.split(":");

        var username = requestHeader[0];
        var password = requestHeader[1];

        // This is an async that queries the database for the correct credentials
        authenticateUser(username, password, function(authenticated) {
            if (authenticated) {
                next();
            } else {
                response.send('Authentication required', 401);
            }
        });
    } else {
        response.send('Authentication required', 401);
    }
};

И у меня есть мой маршрут:

app.get('/user/', basicAuth, function(request, response) {
    response.writeHead(200);
    response.end('Okay');
});

Если я попытаюсь свернуть этот запрос, я получу:

curl -X GET http://localhost/user/ --user user:password
Cannot GET /user/

Это прекрасно работает, когда я добавляю промежуточное ПО при вызове createServer (), но когда я делаю это для каждого запроса, как будто я нахожусь на этом маршруте, он просто тихо умирает на стороне сервера. К сожалению, поскольку не все запросы требуют аутентификации, я не могу сделать это глобальным промежуточным программным обеспечением.

Я попытался отключить Express и просто использовать Connect, и я получил тот же результат, поэтому я предполагаю, что это что-то есть. Кто-нибудь испытывал это раньше?

Редактировать: Я должен также упомянуть, что я зарегистрировал соответствующий код исчерпывающе, и вызывается следующий, но он, похоже, никуда не денется.

Редактировать 2: для записи, «пустое» промежуточное ПО также молча терпит неудачу:

var func = function(request, response, next) {
    next();
};

app.get('/user', func, function(request, response) {
    response.writeHead(200);
    response.end('Okay');
});

Это также имеет тот же результат.

Ответы [ 2 ]

0 голосов
/ 29 мая 2011

Я нашел эту ссылку.

Промежуточное программное обеспечение Express: базовая аутентификация HTTP

Автор, кажется, делает то же самое, что и вы, за исключением того, что у него есть возврат после next ().

0 голосов
/ 16 апреля 2011

function(request, response, callback) {

против

next();

Вы должны либо изменить callback на next, либо наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...