userSession.loadUserData()μ userDataλ κΈ°μ‘΄ blockstack.js λ©μλμ λμΌνκ² μλνμ§ μμ΅λλ€.
μ΄μ μΈμ¦μΌλ‘ λΈλΌμ°μ μ€μ 'μ΄λ¦' λ° 'μλ°ν' νλ‘ν λ°μ΄ν°λ₯Ό κ°μ Έμ€κΈ° μν΄ let person = new blockstack.Person(userData)
ν μ μμμ΅λλ€. μ¦. person.name()
λ° person.avatarUrl()
.
μ°κ²°μ μ¬μ©νλ©΄ μμ νλ‘μΈμ€λ person.name() λ° person.avatarUrl()μ΄ μ‘΄μ¬νλλΌλ λ λ€μ λν΄ null
λ₯Ό λ°νν©λλ€.
μ΄κ²μ μΌμ’ μ κ°μΈνλ₯Ό νμ©νλ €λ μ±μ λν νκ·μ λλ€.
λ¬Έμ λ λ κ±°μ λΈλ‘μ€ν λΈλΌμ°μ κ° νλ‘ν URLμμ κ°μ Έμ¨ authReponse ν ν°μ νλ‘νμ λ°ννλ λ°λ©΄ μ λΈλ‘μ€ν μ±/μΈμ¦μλ μ΄ μ‘°νλ₯Ό μννμ§ μλλ€λ κ²μ λλ€.
μ¬μ ν μ¬μ©μμ νλ‘νμ λ³΄κ³ μΆμ μ±μ lookup profile(http://blockstack.github.io/blockstack.js/globals.html#lookupprofile)μ νΈμΆν΄μΌ ν©λλ€.
loadUserData
μ¬μ ν λμΌνλ©° μΈμ¦μκ° μ 곡νλ λ‘컬 μΊμ(localstorage)μμ μ¬μ©ν μ μλ μ¬μ©μ λ°μ΄ν°λ₯Ό λ‘λν©λλ€.
ν₯λ―Έλ‘κ²λ publish_data
λ₯Ό μμ²νλ μ±μ κ²½μ° μ°κ²° μΈμ¦μκ° νλ‘νμ λ°νν©λλ€.
@htove μ±κΈ νλ μ΄μ΄ μ±μ μ΄ μ§μμ λ€μ μΆκ°νλ μμΌ μλκΉ?
lookupProfileμ μ¬μ©νλ @friedger λ μ¬μ ν κ°μΈνμ νμν name() λ° 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 μ°Έκ³ λ‘, μ΄κ²μ μ¬μ ν ββν΄λμ€ λ©μλλ₯Ό μ¬μ©νμ¬ μλνμ§ μμ΅λλ€. λ΄ νλ‘νμ μ΄λ¦κ³Ό μλ°νκ° μλμ§ νμΈνμ΅λλ€.
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: (...)
κ·Έλ°λ° Local Storageμμ 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
κ° Promiseλ₯Ό λ°ννκ³ await
μ¬μ©νμ§ μλλ€λ κ²μ
λλ€. κ·Έλμ, λΉμ μ΄ μ»λ κ²μ μ½μμ
λλ€.
Person
ν΄λμ€λ₯Ό μ¬μ©ν λ μ¬μ ν μ§μλλ λ¬Έμ μ λν΄ νμ μ‘°μΉλ₯Ό μ·¨ν΄μ£Όμ
μ κ°μ¬ν©λλ€. μ΄μ λν΄ μ‘°μ¬νκ² μ΅λλ€.
@dantravino - new Person(userData)
λμ new Person(userData.profile)
νΈμΆν΄μΌ νλ κ² κ°μ΅λλ€. μλ§λ μ΄μ μλ λ€λ₯΄κ² μλνμ΅λκΉ? κ·Έλ¬λ μ΄κ²μ μ¬κΈ° λ¬Έμμ μΌμΉν©λλ€.
https://blockstack.github.io/blockstack.js/index.html#quickstart -build-an-application