لا يعمل userData من userSession.loadUserData () مثل طرق blockstack.js القديمة.
مع المصادقة السابقة أتمكن let person = new blockstack.Person(userData)
للحصول على متصفح مجموعة 'اسم' وبيانات ملفك الشخصي الصورة. بمعنى آخر. person.name()
و person.avatarUrl()
.
باستخدام connect ، تُرجع العملية أعلاه null
لكل من person.name () و person.avatarUrl () ، حتى لو كانا موجودين.
هذا انحدار لتلك التطبيقات التي تريد السماح ببعض مظاهر التخصيص.
تكمن المشكلة في أن مستعرض blockstack القديم يقوم بإرجاع ملف التعريف في رمز authReponse الذي تم جلبه من عنوان url للملف الشخصي ، بينما لا يقوم التطبيق / المصدق الجديد blockstack بهذا البحث.
يجب أن تستدعي التطبيقات التي لا تزال ترغب في رؤية الملف الشخصي للمستخدم ملف تعريف البحث (http://blockstack.github.io/blockstack.js/globals.html#lookupprofile) على ما أعتقد.
لا يزال loadUserData
يفعل الشيء نفسه ، فهو يقوم بتحميل بيانات المستخدم المتوفرة في ذاكرة التخزين المؤقت المحلية (التخزين المحلي) التي يوفرها المصدق.
ومن المثير للاهتمام ، بالنسبة للتطبيقات التي تطلب publish_data
يقوم مصدق الاتصال بإرجاع ملف التعريف.
hstove الأفكار حول إضافة هذا الدعم مرة أخرى لتطبيقات اللاعب الفردي؟
friedger باستخدام lookupProfile لا يزال لا منح حق الوصول إلى اسم () وavatarUrl () اللازمة لإضفاء الطابع الشخصي.
إرجاعdantrevino lookupProfile
وعدًا بملف شخصي مع الخاصية name
و image[i].contentUrl
إذا قدمه المستخدم.
friedger أنا لا أراها. ماذا ينقصني؟
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__()
للحصول على تفاصيل ملف التعريف المفقودة ، راجع https://github.com/blockstack/ux/issues/322
لقد دفعت إصلاحًا إلى المصدق - كانت هناك بعض المشكلات حيث لم نكن نحضر الملف الشخصي بشكل صحيح قبل authResponse
. من فضلك حاول هذا مرة أخرى ، واسمحوا لي أن أعرف إذا كنت ترى نفس المشكلة.
hstove fyi ، لا يزال هذا لا يعمل باستخدام طرق الفصل. لقد تأكدت من أن ملفي الشخصي يحتوي على اسم وصورة رمزية:
https://gaia.blockstack.org/hub/1JE8MjzuSi19cBifCvrbsyAjx8PvwhakZp/profile.json
طريقة تسجيل الدخول الخاصة بي:
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);
},
وإخراج console.log () .. لاحظ أن الاسم والصورة الشخصية لا يزالان null
عند استخدام طرق الفئة:
{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: (...)
ومع ذلك ، عندما أنظر إلى blockstack-session
في التخزين المحلي ، فإن الاسم ودعائم الصورة موجودة.
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"
أنا لا أراه. ماذا ينقصني؟
dantravino ، المشكلة هنا هي أن lookupProfile
يُرجع وعدًا ، وأنك لا تستخدم await
. لذا ، ما ستحصل عليه هو وعد.
نشكرك على متابعة المشكلة التي لا تزال قائمة عند استخدام فئة Person
- سأبحث في ذلك.
مرحبًا dantravino - يبدو أنك تحتاج فقط إلى الاتصال بـ new Person(userData.profile)
، بدلاً من new Person(userData)
. ربما عملت بشكل مختلف بالنسبة لك من قبل؟ لكن هذا يتوافق مع المستندات هنا:
https://blockstack.github.io/blockstack.js/index.html#quickstart -build-an-application