userData dari userSession.loadUserData() tidak bekerja sama seperti metode blocktack.js lama.
Dengan auth sebelumnya saya bisa let person = new blockstack.Person(userData)
untuk mendapatkan data profil 'nama' dan 'avatar' yang disetel browser. yaitu. person.name()
dan person.avatarUrl()
.
Dengan connect, proses di atas mengembalikan null
untuk person.name() dan person.avatarUrl(), meskipun ada.
Ini adalah regresi untuk aplikasi yang ingin memungkinkan beberapa kemiripan personalisasi.
Masalahnya adalah browser blocktack lama mengembalikan profil dalam token authReponse yang diambil dari url profil, sedangkan aplikasi/authenticator blocktack baru tidak melakukan pencarian ini.
Aplikasi yang masih ingin melihat profil pengguna harus memanggil profil pencarian (http://blockstack.github.io/blockstack.js/globals.html#lookupprofile) saya kira.
loadUserData
masih melakukan hal yang sama, ia memuat data pengguna yang tersedia di cache lokal (penyimpanan lokal) yang disediakan oleh autentikator.
Menariknya, untuk aplikasi yang meminta publish_data
connect authenticator mengembalikan profil.
@hstove berpikir untuk menambahkan dukungan ini kembali untuk aplikasi pemain tunggal?
@friedger menggunakan lookupProfile masih tidak memberikan akses ke name() dan avatarUrl() yang diperlukan untuk personalisasi.
@dantrevino lookupProfile
mengembalikan janji profil dengan properti name
dan image[i].contentUrl
jika disediakan oleh pengguna.
@friedger Saya tidak melihatnya. Apa yang saya lewatkan?
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__()
Untuk detail profil yang hilang, lihat https://github.com/blockstack/ux/issues/322
Saya telah mendorong perbaikan ke autentikator - ada beberapa masalah di mana kami tidak mengambil profil dengan benar sebelum authResponse
. Silakan coba ini lagi, dan beri tahu saya jika Anda melihat masalah yang sama.
@hstove fyi, ini masih tidak berfungsi menggunakan metode kelas. saya telah memastikan bahwa profil saya memiliki nama dan avatar:
https://gaia.blockstack.org/hub/1JE8MjzuSi19cBifCvrbsyAjx8PvwhakZp/profile.json
metode masuk saya:
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);
},
pengguna masuk():
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);
},
dan output dari console.log() .. perhatikan nama dan avatar masih null
saat menggunakan metode kelas:
{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: (...)
Namun, ketika saya melihat blockstack-session
di Penyimpanan Lokal, nama dan properti gambar ada di sana.
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"
Saya tidak melihatnya. Apa yang saya lewatkan?
@dantravino masalahnya di sini adalah lookupProfile
mengembalikan Janji, dan Anda tidak menggunakan await
. Jadi, apa yang Anda dapatkan kembali adalah Janji.
Terima kasih telah menindaklanjuti masalah yang masih berlanjut saat Anda menggunakan kelas Person
- Saya akan memeriksanya.
Hai @dantravino - sepertinya Anda hanya perlu menelepon new Person(userData.profile)
, alih-alih new Person(userData)
. Mungkin itu bekerja secara berbeda untuk Anda sebelumnya? Tapi ini sejalan dengan dokumen di sini:
https://blockstack.github.io/blockstack.js/index.html#quickstart -build-an-application