Stacks-wallet-web: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдЕрдкреНрд░реИрд▓ 2020  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: blockstack/stacks-wallet-web

userSession.loadUserData() рд╕реЗ userData рд▓реАрдЧреЗрд╕реА рдмреНрд▓реЙрдХрд╕реНрдЯреИрдХ.js рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рд╕рд╛рде рдореИрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░-рд╕реЗрдЯ 'рдирд╛рдо' рдФрд░ 'рдЕрд╡рддрд╛рд░' рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП let person = new blockstack.Person(userData) рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдЕрд░реНрдерд╛рддред person.name() рдФрд░ person.avatarUrl() ред

рдХрдиреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде, рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЛрдиреЛрдВ person.name() рдФрд░ person.avatarUrl() рдХреЗ рд▓рд┐рдП null рд▓реМрдЯрд╛рддреА рд╣реИ, рднрд▓реЗ рд╣реА рд╡реЗ рдореМрдЬреВрдж рд╣реЛрдВред

рдпрд╣ рдЙрди рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рд╣реИ рдЬреЛ рд╡реИрдпрдХреНрддрд┐рдХрд░рдг рдХреЗ рдХреБрдЫ рдЕрдВрд╢ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╕рднреА 10 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд▓реАрдЧреЗрд╕реА рдмреНрд▓реЙрдХрд╕реНрдЯреИрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ url рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП authReponse рдЯреЛрдХрди рдореЗрдВ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдирдпрд╛ рдмреНрд▓реЙрдХрд╕реНрдЯреИрдХ рдРрдк/рдкреНрд░рдорд╛рдгрдХ рдпрд╣ рд▓реБрдХрдЕрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдРрдкреНрд╕ рдЬреЛ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд▓реБрдХрдЕрдк рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ (http://blockstack.github.io/blockstack.js/globals.html#lookupprofile) рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред

loadUserData рдЕрднреА рднреА рд╡рд╣реА рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рдорд╛рдгрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕реНрдерд╛рдиреАрдп рдХреИрд╢ (рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ) рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред

рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЙрди рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдЬреЛ publish_data рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рдХрдиреЗрдХреНрдЯ рдкреНрд░рдорд╛рдгрдХ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реИред

@hstove рдПрдХрд▓-рдЦрд┐рд▓рд╛рдбрд╝реА рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд░реНрдерди рдХреЛ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ?

рд▓реБрдХрдЕрдкрдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ @friedger рдЕрднреА рднреА рд╡реИрдпрдХреНрддрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╛рдо() рдФрд░ рдЕрд╡рддрд╛рд░рдпреВрдЖрд░рдПрд▓() рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

@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(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 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jasperjansz picture jasperjansz  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

john-light picture john-light  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

markmhx picture markmhx  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

friedger picture friedger  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

hstove picture hstove  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ