Получение информации о профиле пользователя в Auth0 - PullRequest
1 голос
/ 16 января 2020

Я разрабатываю Angular 8 SPA и успешно интегрировал аутентификацию Auth0. Информация профиля для каждого пользователя отображается так же, как показано в учебнике Auth0. Смотрите вывод на экран ниже. Как получить доступ к свойству электронной почты после входа пользователя в систему?

{
  "nickname": "user,
  "name": "user@email.com",
  "picture": "https://s.gravatar.com/user_image.png",
  "updated_at": "2020-01-15T17:39:10.467Z",
  "email": "user@email.com",
  "email_verified": true,
  "sub": "auth0|000000000000000000000000"
}

В app.module.ts я попытался подписаться следующим образом:

currentUser: string;
this.auth.userProfile$.subscribe(userProfile => {this.currentUser = userProfile});
console.log(this.currentUser);

Однако в консоли Я просто получаю: null. Насколько я могу судить, auth.service.ts обеспечивает необходимое наблюдаемое:

private userProfileSubject$ = new BehaviorSubject<any>(null);
userProfile$ = this.userProfileSubject$.asObservable();

Любое направление ценится.

Ответы [ 2 ]

1 голос
/ 17 января 2020

Проблема в том, что ваш console.log(this.currentUser) выполняется до того, как значение будет добавлено в вашу подписку.

Если вы измените свой код следующим образом, он должен работать:

this.auth.userProfile$.subscribe(userProfile => {
    this.currentUser = userProfile;
    console.log(this.currentUser);
});
1 голос
/ 17 января 2020

Я не знаю, почему вы подписываетесь на app.module.ts, поскольку auth.service.ts дает возможность подключиться к любому другому компоненту.

Я пробую учебник с официальной страницы Auth0 и измените home-content.component.ts добавив

// import section
import { AuthService } from 'src/app/auth/auth.service';

getSessionScope(){
    this.auth.userProfile$.subscribe(data => this.currentUser = data);
    console.log(this.currentUser);

  }

и home-content.component.html добавив

<button
      id="testButton"
      class="btn btn-primary btn-margin"
      (click)="getSessionScope()"
    >
      log session
    </button>

, и как только событие щелчка будет инициировано через auth.service, вы можете получить данные сеанса , так что если вам нужен адрес электронной почты, попробуйте this.currentUser.email

...