2015-07-13 5 views
1

Я создал приложение узла js с помощью express framework.Экспресс-аутентификация на основе маршрутизации JS

Я создал промежуточное программное обеспечение для ограничения доступа к некоторым маршрутам.

Middleware действительно работает нормально. но у меня возникают трудности с отображением данных.

Предположим, что в моем приложении я создал маршрут для отображения списка стран ('/ country/master') i.e html-страницу, которая использует внутренний маршрут/маршрут по умолчанию ('/ country /') для получения данных от mongoDB.

В этом случае пользователь не сможет увидеть данные, потому что я не получил разрешение на маршруты «/». но я хочу отображать данные, но не позволяю ему использовать маршрут «/» для проверки данных.

Как я могу справиться с этим делом ????

+0

что вы подразумеваете под макияж использования? если вы хотите запретить кому-либо публиковать данные, вы можете использовать промежуточное программное обеспечение только для сообщений. как ... 'app.post ('/', yourRestrictionFunction)' – Pravin

ответ

1

Ответ зависит от вашей стратегии аутентификации т.е. вы используете идентификаторы сеанса, токены и т.д.

В любом случае, Я предлагаю вам разблокировать учетную запись (aka login) из аутентификации. Они должны быть отдельными промежуточными функциями. Ниже приведен пример того, как это выглядит.

Хотя это отвечает на ваш вопрос, характерный для ExpressJS, он не содержит много других деталей, которые имеют значение при создании системы аутентификации (например, как безопасно хранить пароли). Я работаю в Stormpath, мы предоставляем управление пользователями как API, так что вам не нужно беспокоиться обо всех подробностях безопасности! Очень легко интегрировать наш API в ваше приложение, используя модуль express-stormpath. У вас будет полнофункциональная пользовательская база данных за считанные минуты, без необходимости настройки mongo или таблицы пользователей.

Все, что сказал, вот пример:

/* pseudo example of building your own authentication middleware */ 

function usernamePasswordExchange(req,res,next){ 
    var username = req.body.username; 
    var password = req.body.password; 

    callToAuthService(username,password,function(err,user){ 
    if(err){ 
     next(err); // bad password, user doesn’t exist, etc 
    }else{ 
     /* 
     this part depends on your application. do you use 
     sessions or access tokens? you need to send the user 
     something that they can use for authentication on 
     subsequent requests 
     */ 
     res.end(/* send something */); 
    } 
    }); 
} 

function authenticate(req,res,next){ 
    /* 
    read the cookie, access token, etc. 
    verify that it is legit and then find 
    the user that it’s associated with 
    */ 
    validateRequestAndGetUser(req,function(err,user){ 
    if(err){ 
     next(err); // session expired, tampered, revoked 
    }else{ 
     req.user = user; 
     next(); 
    } 
    }); 
} 

app.post('/login',usernamePasswordExchange); 

app.get('/protected-resource',authenticate,function(req,res,next){ 
    /* 
    If we are here we know the user is authenticated and we 
    can know who the user is by referencing req.user 
    */ 
}); 
0

Вы можете позиционирование промежуточного слоя в вас app.for примера: -

app.get('/country/master',function(req,res){ 

}) 

app.use(function(req,res){ 
    your middle ware for providing authentication 
}) 

// other routes where authentication should be enabled 
app.get('other urls') 
+0

У меня есть маршрут «/ country/master», который является моим html-представлением, а «/ country /» по умолчанию api для получения данных. который требуется для моего приложения, чтобы получить данные, и мне нужно, когда пользователь пытается нажать на выше url из браузера, он должен быть ограничен. – Overseas634

+0

@ Overseas634 вы пытаетесь сказать/страна/мастер - это маршрут, который дает html-страницу в качестве ответа. – KlwntSingh

+0

yes '/ country/master' - это маршрут, который дает html-страницу в качестве ответа – Overseas634