2014-01-15 2 views
2

У меня есть приложение Node.js, где я использовал леса Yeoman для Angular. Я также использую ExpressJS для серверной части.Angularjs, Expressjs и passjs для проверки подлинности на стороне сервера

Поэтому в основном моя структура приложение:

app 
    -->views 
     --> more files 
server.js 

структура является более тяжелым, чем это, но это держать его просто.

В основном я использовал PassportJS на стороне сервера для аутентификации. Маршрутизация в настоящее время выполняется через параметры маршрутизации AngularJS.

я наткнулся вопрос сейчас, как мне нужно, чтобы выполнить аутентификацию, используя метод промежуточного слоя:

function ensureAuthenticated(req, res, next) { 
    console.log('authenticate=' + req.isAuthenticated()); 
    if (req.isAuthenticated()) { 
     return next(); 
    } 
    res.redirect('/') 
} 

Я создал app.get на стороне сервера, чтобы проверить, если пользователь пытается получить к страница администратора без регистрации:

app.get('/admin', ensureAuthenticated, 
    function(req, res){ 
     console.log('get admin' + req.params); 
     res.sendfile(__dirname + '/app/views/admin/users.html'); 
    }); 

Но это никогда не идет на метод. Что я делаю не так?

Любые советы были бы замечательными.

ответ

1
if (!req.isAuthenticated()) { 
      return res.send(401, 'User is not authorized'); 
     } 
     next(); 
+0

Привет, аутентификация работает, если я просто поставил/admin, но мой url - localhost: 8888/#/admin. Он никогда не попадает в маршрут в экспресс, если я набираю URL-адрес, как показано на картинке – tjhack

+0

localhost: 8888/#/admin - это угловая область, поэтому вы должны изменить свою логику. Я думаю, что, например, поставьте свой взгляд на путь администратора. – Whisher

+0

У меня есть еще одна проблема, которая сейчас когда я направляюсь на страницу администратора, я нажимаю кнопку обновления в браузере, и он пытается отобразить страницу, но он указывает, что двигатель по умолчанию не указан. Я просто использую html-страницы? – tjhack

0

Причина это не работает потому, что angularjs locationprovider не был установлен htmlmode5 при настройке маршрутов на стороне клиента. Была добавлена ​​следующая строка:

$locationProvider.html5Mode(true); 

Это в основном удаляет «#» с URL-адреса.

+0

, но при этом вы все еще находитесь в области angularjs .... – Whisher

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