userSession.loadUserData()のuserDataは、従来のblockstack.jsメソッドと同じようには機能しません。
以前の認証では、 let person = new blockstack.Person(userData)
を使用して、ブラウザで設定された「名前」と「アバター」のプロファイルデータを取得できました。 NS。 person.name()
およびperson.avatarUrl()
。
connectを使用すると、上記のプロセスは、person.name()とperson.avatarUrl()の両方が存在する場合でも、それらに対してnull
を返します。
これは、パーソナライズのようなものを許可したいアプリのリグレッションです。
問題は、従来のブロックスタックブラウザがプロファイルURLからフェッチしたauthReponseトークンでプロファイルを返すのに対し、新しいブロックスタックアプリ/オーセンティケーターはこのルックアップを行わないことです。
それでもユーザーのプロファイルを確認したいアプリは、ルックアッププロファイル(http://blockstack.github.io/blockstack.js/globals.html#lookupprofile)を呼び出す必要があります。
loadUserData
引き続き同じことを行い、オーセンティケーターによって提供されるローカルキャッシュ(localstorage)で使用可能なユーザーデータをロードします。
興味深いことに、 publish_data
を要求するアプリの場合、接続オーセンティケーターはプロファイルを返します。
@hstoveは、シングルプレイヤーアプリにこのサポートを追加することについて考えていますか?
lookupProfileを使用する@friedgerは、パーソナライズに必要なname()およびavatarUrl()へのアクセスをまだ提供していません。
@dantrevino lookupProfile
は、ユーザーから提供された場合、プロパティname
およびimage[i].contentUrl
を持つプロファイルのpromiseを返します。
@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
がPromiseを返し、 await
を使用していないことです。 だから、あなたが取り戻しているのは約束です。
Person
クラスを使用しても問題が解決しないことをフォローアップしていただき、ありがとうございます。調査します。
ちょっと@dantravino - new Person(userData)
代わりにnew Person(userData.profile)
呼び出す必要があるようです。 たぶんそれはあなたのために以前は違った働きをしましたか? しかし、これはここのドキュメントと一致しています:
https://blockstack.github.io/blockstack.js/index.html#quickstart -build-an-application