FireBase Facebook oAuth addScope () - PullRequest
0 голосов
/ 04 июля 2018

Я использую firebase с angular и oAuth с провайдером firebase facebook. Все работает нормально. Однако, когда я пытаюсь добавить новую область (user_friends) для примеров, я не получаю никаких данных (всплывающее окно запрашивает у меня правильные области):

//auth.service.ts
 signInWithFacebook() {
    const provider =  new firebase.auth.FacebookAuthProvider();
    provider.addScope("user_friends");
    return this.oAuthLogin(provider);
 }
 private oAuthLogin(provider) {
    return this._firebaseAuth.auth.signInWithPopup(provider)
    .then((credential) => {
       this.updateUserData(credential.user)
    })
 }

Таким образом, учетные данные получили обычную пользовательскую информацию (displayName, photoUrl) как обычно. Я пытался найти возвращенное обещание в качестве обратного вызова:

type UserCredential = {
   additionalUserInfo?: firebase.auth.AdditionalUserInfo | null;
   credential: firebase.auth.AuthCredential | null;
   operationType?: string | null;
   user: firebase.User | null;
};

Мы можем видеть, что firebase.user получает много методов, но не добавляет строку для моей новой области видимости.

interface UserInfo {
    displayName: string | null;
    email: string | null;
    phoneNumber: string | null;
    photoURL: string | null;
    providerId: string;
    uid: string;
}

Таким образом, я не вижу, как мои данные user_friends, которые представляют собой массив (ниже), могут быть добавлены к данным учетных данных (какой метод?) И отображены в моей консоли.

"friends": {
  "data": [
    //friends id and their name
  ],

  "summary": {
    "total_count": 631
  }
}

спасибо за вашу помощь!

1 Ответ

0 голосов
/ 12 июля 2018

Я действительно нашел решение и хотел поделиться с потерянными душами, как я.

1) Метод addScope () - это просто метод для запроса дополнительных областей во всплывающем окне oAuth, в обратном вызове нет данных.

2) Получение дополнительных областей Facebook необходимо выполнить с помощью AccessToken через graphUrl, как API

3) Вот код для получения жизнеспособного доступа: токен:

private oAuthLogin(provider) {
return this._firebaseAuth.auth.signInWithPopup(provider)
  .then((result) => {
      this.token = result.credential["accessToken"];
    this.updateUserData(result.user)
  })
}

Документация firebase / js получает AccessToken через result.credential.accessToken, но во многих случаях выдает ошибку машинописного текста (многие получают это сообщение об ошибке).

Таким образом, получение списка друзей Facebook (с GraphUrl), например:

  getFacebookFriendsList() {
var graphUrl = 'https://graph.facebook.com/me/friends?access_token=' + this.token;
return this.http.get(graphUrl);
}
...