Проверка подлинности на основе токенов Angular, получение и сохранение профиля пользователя, лучшая практика

#angular #angular7 #http-token-authentication

#angular #angular7 #http-token-аутентификация

Вопрос:

Несколько месяцев назад я начал создавать свою первую аутентификацию на основе токенов для проекта Angular, и теперь мне нужно ее обновить. До сих пор моя конечная точка / login возвращала только токен, который хранится в локальном хранилище. Пользователь входит в систему, когда токен присутствует и действителен. Но теперь мне нужно также отобразить имя пользователя на панели навигации и роль пользователя, потому что мне нужно создать защиту роли.

Я прочитал много статей и вопросов / ответов по этой теме, но я действительно смущен, какой лучший способ получить профиль пользователя.

Получить

  1. Получите данные пользователя непосредственно при входе в систему вместе с токеном
  2. Точно после входа в систему, если запрос на вход выполнен успешно, выполните другой запрос, например: /me
  3. Добавьте имя пользователя и роль в полезную нагрузку токена

Магазин

Также данные должны быть постоянными (если пользователь закрывает и открывает браузер), как я могу их сохранить? Должен ли я использовать хранилище a (локальное хранилище / cookie)? Или выполнять запрос каждый раз, когда пользователь открывает приложение?

Используйте

Здесь я понятия не имею. Если я использую хранилище, должен ли я читать их каждый раз? Или я должен использовать тему?

По вашему опыту, какой лучший способ сделать это? Или у вас есть другие идеи? Заранее спасибо!

Комментарии:

1. Я думаю, это зависит от вашей общей архитектуры. Я думаю, что лучше всего прочитать пару статей. Это помогло мне: sitepoint.com/user-authentication-mean-stack , потому что я использую СРЕДНИЙ стек. Там пользовательские данные хранятся внутри JWT (токена).

2. Соответствует ли ваш процесс токена стандартной модели аутентификации, такой как Oauth2 или OpenID? На самом деле это было бы рекомендовано.

3. @alex, спасибо за статью! Я прочитаю это.

4. @MoxxiManagarm, мы используем JWT.

Ответ №1:

Я имею дело с этим, я надеюсь вам помочь.

  1. Повторный api/login запрос выглядит следующим образом:
 {
  token: 'your token...',
  expireAt: 'token expire time',
  user: {
    name: 'admin',
    role: 'master'
    // ... else user info
  }
}
  
  1. Используйте localStorage сохранение токена и информации о пользователе. Вы можете получить информацию о токене из локального хранилища при следующем открытии того же веб-сайта и определить, нужно ли повторно входить в систему, исходя из времени истечения срока действия.

  2. cookie не следует сохранять сложную или большую структуру данных, потому что это:

    • Неудобная операция
    • Размер ограничен
    • Каждый раз, когда http-запрос должен принимать

Комментарии:

1. Спасибо за наш ответ! Я подожду, чтобы узнать, смогу ли я получить большинство ответов и сравнить их.