2016-03-07 3 views
0

Мне нужно знать, что если мой метод проверки подлинности и управления сеансом является правильным.Сессии и Логин Данные пользователя с узлом и AngularJS

Я использую управление сеансом, когда получаю успешную аутентификацию. от узла сервера. Я храню данные пользователя (без каких-либо следов pass.) В $ window.sessionStorage, и если пользователь помечен memMe (флажок), сохраните данные в $ window.localStorage тоже.

Через это я могу получить данные в разных контроллерах. Хотя я где-то читал о реализации сеанса на стороне сервера (nodeJs), также возможно. Но я не уверен, как использовать сеанс вместе с JSONToken Authentication.

Я использовал https://jasonwatmore.com/post/2015/12/09/MEAN-Stack-User-Registration-and-Login-Example.aspx как пример обучения, но я не мог этого понять.

/app/app.js

Почему в методе Run()?

// add JWT token as default auth header 
    $http.defaults.headers.common['Authorization'] = 'Bearer ' + $window.jwtToken; 

и что это:

// manually bootstrap angular after the JWT token is retrieved from the server 
$(function() { 
    // get JWT token from server 
    $.get('/app/token', function (token) { 
     window.jwtToken = token; 

     angular.bootstrap(document, ['app']); 
    }); 
}); 

/controllers/app.controller.js

// use session auth to secure the angular app files 
router.use('/', function (req, res, next) { 
    if (req.path !== '/login' && !req.session.token) { 
     return res.redirect('/login?returnUrl=' + encodeURIComponent('/app' + req.path)); 
    } 

    next(); 
}); 

// make JWT token available to angular app 
router.get('/token', function (req, res) { 
    res.send(req.session.token); 
}); 

// serve angular app files from the '/app' route 
router.use('/', express.static('app')); 

ответ

0

Таким образом с помощью сеанса на стороне сервера с JWT рода поражения цели использования JWT. JWT являются удивительными по-разному, но один из способов, которыми они великолепны, независимо от того, какой сервер перехватывает запрос, он может проверить пользователя.

Если вы положили его на сеанс, вы должны убедиться, что клиент продолжает работать на том же сервере, что и сеанс, сохраненный в памяти на этом компьютере. Есть много способов обойти это, но опять-таки это отчасти поражает цель интернет-токена JSON.

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

req.header.whatever_my_tokens_name_is 
+0

Как насчет хранения данных в sessionStorage и localStorage? –

+0

Не могли бы вы объяснить мне, какие части кода я выделил –

+0

Те, которые в порядке, как на стороне клиента. Поэтому вы просто берете их у клиента и передаете их на сервер при каждом использовании. Однако я бы не приветствовал использование сеанса на стороне сервера. Поймите, что использование localStorage может открыть вас для атак XSS, поэтому убедитесь, что вы используете соответствующие заголовки в своем приложении. Угловой имеет довольно много встроенных в защиту против него! Я использую localStorage для своего приложения. Что-то еще, что вы должны сделать, не имеет разницы в localStorage и sessionStorage, просто идите/обновите JWT по мере необходимости. –

0

Приведенного ниже код установить $ HTTP отправлять по каждому запросу токен JWT на сервер.

// add JWT token as default auth header 
$http.defaults.headers.common['Authorization'] = 'Bearer ' + $window.jwtToken; 

Код ниже получает токен из '/ app/token' и сохраняет его в LocalStorage. После этого начинается угловая.

// manually bootstrap angular after the JWT token is retrieved from the server 
$(function() { 
    // get JWT token from server 
    $.get('/app/token', function (token) { 
     window.jwtToken = token; 

     angular.bootstrap(document, ['app']); 
    }); 
}); 

Вот это промежуточное ПО, что проверить, если нет маркеров хранятся в req.session.token и просил URL не '/ Логин. Если да, отправьте перенаправление на «/ login».

// use session auth to secure the angular app files 
router.use('/', function (req, res, next) { 
    if (req.path !== '/login' && !req.session.token) { 
     return res.redirect('/login?returnUrl=' + encodeURIComponent('/app' + req.path)); 
    } 

    next(); 
}); 

И наконец, это конечная точка для запроса клиента «/ token» снова с сервера.

// make JWT token available to angular app 
router.get('/token', function (req, res) { 
    res.send(req.session.token); 
}); 

В любом случае, проверьте реакцию @ morgan-g на безрегуляторную сессию и JWT.

Надеюсь, это поможет.

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