userData de userSession.loadUserData () no funciona igual que los métodos blockstack.js heredados.
Con la autorización anterior, pude let person = new blockstack.Person(userData)
para obtener los datos de perfil de 'nombre' y 'avatar' configurados en el navegador. es decir. person.name()
y person.avatarUrl()
.
Con connect, el proceso anterior devuelve null
para person.name () y person.avatarUrl (), incluso si existen.
Esta es una regresión para aquellas aplicaciones que quieren permitir cierta apariencia de personalización.
El problema es que el navegador blockstack heredado devuelve el perfil en el token authReponse obtenido de la URL del perfil, mientras que la nueva aplicación / autenticador blockstack no realiza esta búsqueda.
Las aplicaciones que aún quieren ver el perfil de un usuario deben llamar al perfil de búsqueda (http://blockstack.github.io/blockstack.js/globals.html#lookupprofile), supongo.
loadUserData
todavía hace lo mismo, carga los datos del usuario que están disponibles en la caché local (almacenamiento local) proporcionada por el autenticador.
Curiosamente, para las aplicaciones que solicitan publish_data
el autenticador de conexión devuelve el perfil.
@hstove ¿piensa en
@friedger usando lookupProfile todavía no da acceso a name () y avatarUrl () necesarios para la personalización.
@dantrevino lookupProfile
devuelve una promesa de un perfil con la propiedad name
y image[i].contentUrl
si la proporciona el usuario.
@friedger No lo veo. ¿Qué me estoy perdiendo?
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__()
Para obtener detalles de perfil que faltan, consulte https://github.com/blockstack/ux/issues/322
He enviado una solución al autenticador: hubo algunos problemas en los que no estábamos obteniendo correctamente el perfil antes de authResponse
. Vuelva a intentarlo y avíseme si observa el mismo problema.
@hstove fyi, esto todavía no funciona con los métodos de clase. Me he asegurado de que mi perfil tenga un nombre y un avatar:
https://gaia.blockstack.org/hub/1JE8MjzuSi19cBifCvrbsyAjx8PvwhakZp/profile.json
mi método de inicio de sesión:
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);
},
y la salida de console.log () .. tenga en cuenta que el nombre y el avatar siguen siendo null
cuando se utilizan los métodos de clase:
{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: (...)
Sin embargo, cuando miro blockstack-session
en Almacenamiento local, el nombre y los accesorios de imagen están ahí.
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"
No lo veo. ¿Qué me estoy perdiendo?
@dantravino, el problema aquí es que lookupProfile
devuelve una Promise y no estás usando await
. Entonces, lo que está recibiendo es una Promesa.
Gracias por hacer un seguimiento del problema que aún persiste cuando usa la clase Person
. Lo investigaré.
Hola @dantravino : parece que solo necesitas llamar a new Person(userData.profile)
, en lugar de new Person(userData)
. ¿Quizás funcionó de manera diferente para ti antes? Pero esto está en línea con los documentos aquí:
https://blockstack.github.io/blockstack.js/index.html#quickstart -build-an-application