2016-09-16 1 views
1

Я довольно новичок в работе с токенами. Просто начал учиться вчера.Как вы меняете то, что отображается на внешнем (угловом) представлении, основанном на свойствах вашего токена JWT?

У меня есть API-интерфейс Express. Я понимаю, что токен мешает кому-либо получить доступ к данным по данным данных конечной точки/json API ... Но как я могу читать/расшифровывать JWT, когда он находится на угловой стороне?

I.E., Хорошо, я знаю, что этот пользователь вошел в систему и поэтому может просматривать эту страницу, однако этот конкретный пользователь является CREATOR этого события. Поэтому на странице показа этого события пользователям, которые были приглашены, разрешено просматривать их, а также создатель события, но только создатель события увидит кнопку, которая при нажатии на нее вызывает запрос на удаление. Другие пользователи не будут видеть эту кнопку.

Единственный способ, по которому я вижу это, состоит в том, что JWT, содержащий объект пользователя, может быть декодирован на фронте/конце, тогда у меня есть доступ к переменным с декодированными свойствами JWT. I.E., имя пользователя и идентификатор пользователя. Таким образом, на страницу просмотра, оказываемый в Угловом, я могу закодировать логики, такие как: `` `

if (decodedJWT.user.username === event.creator.username) { 
DO SOMETHING HERE LIKE DISPLAY A CERTAIN BUTTON 
} 

` ``

Спасибо.

+1

Дешифрование клиентской стороны маркера поражает всю цель использования jwt в первую очередь. Сделайте это на стороне сервера и передайте любые нечувствительные данные оттуда – charlietfl

+1

JWT может ввести в заблуждение, но charlieftl верен. Вы никогда не хотите декодировать маркерную клиентскую сторону. Перечитайте это, если вы еще не получили лучшего понимания: https://jwt.io/introduction/ –

+0

Чтобы добавить к моему комментарию, JWT * не может * быть расшифрован без секретного ключа. –

ответ

0

Вы должны создать точку API в вашем nodeJS интерфейсе, который будет возвращать данные пользователя, если он вошел в систему:

app.use('/userinfo', expressJwt({secret: secret})); 

Здесь вы убедитесь, что /userinfo защищен JWT и секретный фразой.

Затем маршрут, соответствующий этой возвращает API информации пользователя:

router.get('/get', function (request, response) { 
    response.json({ 
    id: request.user.id, 
    name: request.user.nom, 
    email: request.user.email, 
    role: request.user.role 
    }); 
}); 

Полный API находится в /userinfo/get и обеспечивается с помощью маркеров JWT.

В angularJS вам просто нужно сделать запрос к этому API с помощью простой $http.get('/userinfo/get'), который возвращает объект пользователя или ошибка с сервера, если не вошли в систему.

Конечно, вы должны pass the token to all your $http requests.

+0

Удивительное описание и четко отвечает на вопрос. В принципе, я бы настроил сервер для ответа на пользовательский объект json. Однако данные этого объекта пользователя будут отправляться только тогда, когда пользователь просматривает маршрут/userinfo/get. Значение в Угловом, по умолчанию, только в контроллере, где я делаю запрос http.get на этот маршрут, у меня будут эти данные. Как бы вы предположили, что данные пользовательского json-объекта «сохраняются» на всей моей передней части Angular Session? I.E. если я на странице событий (/events/8)...I хочу сделать условие, где if (event.creator.id === user.id) {do stuff} –

+0

^Я считаю, что я просто ответил на мой вопрос вопрос о моем комментарии выше, подумав об этом.Если есть более простой способ, пожалуйста, поделитесь для сообщества. Моя идея такова: в «Угловом» просто настройте фабрику userObjectCheck, которая выполняет запрос на этот защищенный маршрут «/ userinfo/get» и возвращает объект, если он существует (если пользователь зарегистрирован, угловой перехватчик отправит токен автоматически каждый запрос, позволяющий фабрике получить доступ к конечной точке завода). Теперь, в любом контроллере, где мне нужен этот пользователь, я просто установлю переменную равной возвращаемому значению фабрики, и все это сработает. –

+0

@Tyler Да, фабрика/сервис - это путь. – gyc

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