Stacks-wallet-web: ضمان توافر بيانات ملف تعريف المستخدم

تم إنشاؤها على ٣ أبريل ٢٠٢٠  ·  10تعليقات  ·  مصدر: blockstack/stacks-wallet-web

لا يعمل userData من userSession.loadUserData () مثل طرق blockstack.js القديمة.
مع المصادقة السابقة أتمكن let person = new blockstack.Person(userData) للحصول على متصفح مجموعة 'اسم' وبيانات ملفك الشخصي الصورة. بمعنى آخر. person.name() و person.avatarUrl() .

باستخدام connect ، تُرجع العملية أعلاه null لكل من person.name () و person.avatarUrl () ، حتى لو كانا موجودين.

هذا انحدار لتلك التطبيقات التي تريد السماح ببعض مظاهر التخصيص.

🐛 Bug!

ال 10 كومينتر

تكمن المشكلة في أن مستعرض 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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات