как получить значение из хранилища сеанса - PullRequest
0 голосов
/ 07 августа 2020

Итак, я создал метод, который будет вызываться, когда пользователь нажимает кнопку входа в систему. В этом методе я также храню данные в хранилище сеансов, в которых хранятся имя и роль пользователя. Поэтому, когда я пытаюсь получить данные из хранилища сеанса, я получаю [объект объекта] в консоли. Как получить из него данные.

onSubmit() {

    this.submitted = true;

    this.loaderService.display(true);

    try {

      if (!this.loginForm.invalid) {

        this.login

          .Login(this.f.UserName.value, this.f.Password.value)

          .pipe(first())

          .subscribe(

            (data: Login) => {

              if (data.token) {

                this.loaderService.display(false);

                let user = this.jwtHelperService.getDecodeAccessToken(

                  data.token

                );

                sessionStorage.setItem('userData', user);

                console.log(user);

                this.router.navigate(['/home']);

              } else {

                this.loaderService.display(false);

                this.loginMessage = data.msg;

                this.router.navigate(['/home']);

              }

            },

            (error) => {

              this.loaderService.display(false);

              this.loginMessage = error.error.error_description;

              console.log(error);

            }

          );

      } else {

        this.loaderService.display(false);

      }

    } catch (error) {

      this.loaderService.display(false);

    }

  }

Результатом Console.log (пользователем) в приведенном выше методе является

{sub: "shiv@gmail.com", Roles: Array(1), exp: 1596814970, iat: 1596796970}
   Roles: ["System-Admin"]
  exp: 1596814970
   iat: 1596796970
  sub: "shiv@gmail.com"
   __proto__: Object

userInfo: any = sessionStorage.getItem ('userData'); Итак, когда я пытаюсь открыть console.log (userInfo), я получаю [object Object] Итак, как извлечь из этого sub и Role.

Ответы [ 4 ]

1 голос
/ 07 августа 2020

Sessionstorage (а также localstorage) хранит пары строк ключ / значение (!), Что означает, что вы не можете просто хранить там объекты и извлекать их, как, например, с массивом.

Для хранения объекты в любом хранилище:

sessionStorage.setItem('object', JSON.stringify(obj))

-> это преобразует ваш объект в строку JSON (!) и сохраняет его под ключом object.

Чтобы получить его обратно, вам нужно разобрать строку JSON обратно на объект, чтобы вы могли получить доступ к свойствам как обычно.

var jsonStringObj = sessionStorage.getItem('object'); // This is the json string we stored

var obj = JSON.parse(jsonStringOBJ); // this is your object

console.log(obj.department); // access properties as usual

 
1 голос
/ 07 августа 2020

Вы забыли JSON .stringify

Попробуйте:

sessionStorage.setItem('userData',JSON.stringify(user))

А потом просто:

JSON.parse(sessionStorage.getItem('userData'))
0 голосов
/ 07 августа 2020

у меня работает

  department = JSON.parse(window.sessionStorage.getItem('empDetails')).department;
  
  constructor() { }

  ngOnInit() {
    console.log(this.department);
  }
0 голосов
/ 07 августа 2020

Попробуйте разобрать

(JSON.parse(window.sessionStorage.getItem('empDetails')).id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...