Как получить данные / идентификатор аутентифицированного пользователя? - PullRequest
0 голосов
/ 11 ноября 2019

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

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

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

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

Я не захожу с другой страницы, откуда я мог бы взять идентификатор. Я также поместил свой код auth.service, если это поможет вам, чтобы помочь мне из-за токена, но важны два последних фрагмента (я так думаю).

Это мой код:

auth.service.ts

 private token = null;
  user = null;
  authenticationState = new BehaviorSubject(false);



  constructor(private http: HttpClient, private alertCtrl: AlertController, private storage: Storage, private helper: JwtHelperService,
              private plt: Platform) {
    this.plt.ready().then(() => {
      this.checkToken();
    });
   }

   checkToken() {
       this.storage.get(TOKEN_KEY).then(access => {
           if (access) {
               this.user = this.helper.decodeToken(access);
               this.authenticationState.next(true);
           }
       });
   }

   apilogin(username: string, password: string) {
    return this.http.post<any>(`${this.url}/api/token/`, { username, password })
    .pipe(
        tap(res => {
            this.storage.set(TOKEN_KEY, res['access']);
            this.storage.set(USERNAME_KEY, username);
            this.user = this.helper.decodeToken(res['access']);
            console.log('my user: ', this.user);
            this.authenticationState.next(true);
        }),
        catchError(e => {
            this.showAlert('Oops smth went wrong!');
            throw new Error(e);
        }));
}

user.service.ts

  // get a user's profile
  getUserDetails(id: number): Observable<any> {
    return this.http.get(`${this.url}/users/${id}/`);
  }

profile.ts

 information = null;
 id: number;


      ngOnInit() {
        // How to get just the authenticated api?
        this.activatedRoute.paramMap.subscribe(params => { 
         this.id = validateId(params.get('id'));
     });

        function validateId(id: any): number {
           return parseInt(id);
    }

     // Get the information from the API
    this.userService.getUserDetails(this.id).subscribe(result => {
      this.information = result;
     });
   }

1 Ответ

1 голос
/ 11 ноября 2019

Обновленный ответ Вам необходимо сохранить user_id в хранилище следующим образом

this.storage.set(USER_ID, this.validateId(res['user_id']))

и в текущем компоненте профиля пользователя получить это user_id и передать его this.userService.getUserDetailsметод как:

const currentUserId = this.storage.get(USER_ID); 

this.userService.getUserDetails(currentUserId).subscribe(user => { 
  console.log('user data', user);
});

Старый ответ Предполагается, что профиль любого пользователя находится на том же маршруте (ex: profile/:userId), включая текущего аутентифицированного пользователя

Вам просто нужно добавитьэтот вызов внутри подписки на activatedRoute.paramMap,

try

ngOnInit() {
  // How to get just the authenticated api?
  this.activatedRoute.paramMap.subscribe(params => { 
    this.id = validateId(params.get('id'));

    // Get the information from the API
    this.userService.getUserDetails(this.id).subscribe(result => {
      this.information = result;
    });
  });

  function validateId(id: any): number {
    return parseInt(id);
  }
}

Позвольте мне объяснить, что произошло, когда вы входите в этот компонент, вызывается ловушка ngOnInit и получает пользователя по id, ипосле попытки открыть текущего аутентифицированного пользователя вызывается только обратный вызов activatedRoute.paramMap, а не метод ngOnInit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...