Stacks-wallet-web: Assurer la disponibilité des données de profil utilisateur

Créé le 3 avr. 2020  ·  10Commentaires  ·  Source: blockstack/stacks-wallet-web

userData de userSession.loadUserData() ne fonctionne pas de la même manière que les anciennes méthodes blockstack.js.
Avec l'autorisation précédente, je pouvais let person = new blockstack.Person(userData) pour obtenir les données de profil « nom » et « avatar » définies par le navigateur. c'est à dire. person.name() et person.avatarUrl() .

Avec connect, le processus ci-dessus renvoie null pour person.name() et person.avatarUrl(), même s'ils existent.

Il s'agit d'une régression pour les applications qui souhaitent autoriser un semblant de personnalisation.

🐛 Bug!

Tous les 10 commentaires

Le problème est que le navigateur Blockstack hérité renvoie le profil dans le jeton authReponse récupéré à partir de l'URL du profil, tandis que la nouvelle application/authentificateur Blockstack ne fait pas cette recherche.

Les applications qui veulent toujours voir le profil d'un utilisateur doivent appeler le profil de recherche (http://blockstack.github.io/blockstack.js/globals.html#lookupprofile) je suppose.

loadUserData toujours la même chose, il charge les données utilisateur disponibles dans le cache local (localstorage) fourni par l'authentificateur.

Fait intéressant, pour les applications qui demandent publish_data l'authentificateur de connexion renvoie le profil.

@hstove réfléchit à l'ajout de cette prise en charge pour les applications solo ?

@friedger utilisant lookupProfile ne donne toujours pas accès à name() et avatarUrl() nécessaires à la personnalisation.

@dantrevino lookupProfile renvoie une promesse d'un profil avec la propriété name et image[i].contentUrl si fourni par l'utilisateur.

@friedger je ne le vois pas. Qu'est-ce que je rate?

          const userData = userSession.loadUserData();
          const profile = blockstack.lookupProfile(userData.username);
          console.log("profile loaded: ", profile);

profile loaded: _proto__: Promise constructor: ƒ Promise() then: ƒ then() catch: ƒ catch() finally: ƒ finally() Symbol(Symbol.toStringTag): "Promise" __proto__: Object <strong i="9">@type</strong>: "Person" <strong i="10">@context</strong>: "http://schema.org" apps: {http://localhost:8080: "https://gaia.blockstack.org/hub/1AdqWQnAMsb8uQsrZy96G2P7HYd1zkpMnr/", https://reclaim.gg: "https://gaia.blockstack.org/hub/1PcbTDbgybtTjkETvo9j5jr92VFKJ4rwWC/", https://boom-money-daily.runkodapps.com: "https://gaia.blockstack.org/hub/19wdVbKFyNqVVSuJf8ppt8P92LjUMdJjpz/", https://noteriot-daily.runkodapps.com: "https://gaia.blockstack.org/hub/1Br9sxhdSw6xQJ3x8vvQNkuAz5X5oAq7a5/", https://runkod.com: "https://gaia.blockstack.org/hub/1NpdmvGsNyisR56CUiZHfZHnZukMYiSjJ5/", …} api: {gaiaHubConfig: {…}, gaiaHubUrl: "https://hub.blockstack.org"} __proto__: constructor: ƒ Object() __defineGetter__: ƒ __defineGetter__() __defineSetter__: ƒ __defineSetter__() hasOwnProperty: ƒ hasOwnProperty() __lookupGetter__: ƒ __lookupGetter__() __lookupSetter__: ƒ __lookupSetter__() isPrototypeOf: ƒ isPrototypeOf() propertyIsEnumerable: ƒ propertyIsEnumerable() toString: ƒ toString() valueOf: ƒ valueOf() toLocaleString: ƒ toLocaleString() get __proto__: ƒ __proto__() set __proto__: ƒ __proto__()

Pour les détails du profil manquant, voir https://github.com/blockstack/ux/issues/322

J'ai poussé un correctif sur l'authentificateur - il y avait des problèmes où nous ne récupérions pas correctement le profil avant le authResponse . Veuillez réessayer et laissez-moi savoir si vous rencontrez le même problème.

@hstove fyi, cela ne fonctionne toujours pas en utilisant les méthodes de classe. Je me suis assuré que mon profil a un nom et un avatar :

https://gaia.blockstack.org/hub/1JE8MjzuSi19cBifCvrbsyAjx8PvwhakZp/profile.json

ma méthode de connexion :

    signIn() {
      const authOptions = {
        // The URL you want the user to be redirected to after authentication.
        redirectTo: "/wallet",
        manifestPath: "/manifest.json",
        sendToSignIn: true,
        finished: ({ userSession }) => {
          this.logInUser(userSession);
        },
        appDetails: {
          name: "Boom.Webby",
          icon: `${location.origin}/app-icon.png`,
        },
      };
      authenticate(authOptions);
    },

logInUser() :

  logInUser(context, session) {
    console.log("user session: ", session);
    let userData = session.loadUserData();
    let person = new blockstack.Person(userData);
    userData.name = person.name();
    userData.avatar = person.avatarUrl();
    userData.authenticated = true;
    console.log("userData: ", userData);
    context.dispatch("setUser", userData);
  },

et la sortie de console.log() .. notez que le nom et l'avatar sont toujours null lors de l'utilisation des méthodes de classe :

{username: "fibonacci.id", profile: {…}, email: null, decentralizedID: "did:btc-addr:1JE8MjzuSi19cBifCvrbsyAjx8PvwhakZp", identityAddress: "1JE8MjzuSi19cBifCvrbsyAjx8PvwhakZp", …}
appPrivateKey: (...)
authResponseToken: (...)
authenticated: (...)
avatar: null
coreSessionToken: (...)
decentralizedID: (...)
email: (...)
gaiaAssociationToken: (...)
hubUrl: (...)
identityAddress: (...)
name: null
profile: (...)
username: (...)

Cependant, lorsque je regarde blockstack-session dans le stockage local, les accessoires de nom et d'image sont là.

userData: {username: "fibonacci.id", profile: {<strong i="21">@type</strong>: "Person", <strong i="22">@context</strong>: "http://schema.org",…}, email: null,…}
appPrivateKey: "..."
.
.
.
profile: {<strong i="23">@type</strong>: "Person", <strong i="24">@context</strong>: "http://schema.org",…}
.
.
.
image: [{<strong i="25">@type</strong>: "ImageObject", name: "avatar",…}]
name: "Fibonacci"
username: "fibonacci.id"
version: "1.0.0"

Je ne le vois pas. Qu'est-ce que je rate?

@dantravino le problème ici est que lookupProfile renvoie une promesse, et vous n'utilisez pas await . Donc, ce que vous obtenez en retour est une promesse.

Merci d'avoir suivi le problème qui persiste lorsque vous utilisez la classe Person - je vais y réfléchir.

@dantravino - on dirait que vous devez simplement appeler new Person(userData.profile) , au lieu de new Person(userData) . Peut-être que cela fonctionnait différemment pour vous avant ? Mais c'est conforme à la doc ici :

https://blockstack.github.io/blockstack.js/index.html#quickstart -build-an-application

Cette page vous a été utile?
0 / 5 - 0 notes