-->

Handling user profiles in Ethereum DApps

2019-03-09 12:09发布

问题:

I'm in the process of creating an Ethereum DApp. The DApp consists of users who have associated data like email, name, and a profile picture. I would like to store the contents of the user within IPFS as a JSON object and reference this on chain using the IPFS hash. How could I go about associating this data with a particular user? In the sense, that subsequent interactions with the DApp connect the user with the data stored in IPFS. Is this done using the users account hash with a password of some sort?

For example, user A is interested in using the DApp and so, provides his or her email, name, and profile picture. Then any subsequent interaction with the DApp, like a comment or post would link this user to the respective user data in IPFS.

Any suggestions or adjustments to this way of modeling users would be greatly appreciated. Thanks!

(P.S. I come from the traditional web/mobile app world so I'm just getting accustomed to modeling things using smart contracts. So I apologize in advance if this is a simple or ill-structured question.)

回答1:

One of the beauties of using a platform like Ethereum is that you can build a ZERO click login. If we establish that the user's web3.eth.accounts[0] is proof that the user controls the private key of that account's address, then you will always know that the user is valid.

If you want to use IPFS like a database, my suggested approach would be this:

Note that with most decentralised systems a lot of the action happens on the client side.

User Signup

  • Users have Ethereum accounts.
  • On sign up user data is collected into a JSON object
  • A file is created, write JSON object to file.
  • Pass file to IPFS
  • Get file hash (which is basically its IPFS location)
  • Store the IPFS hash in an Ethereum contract that associates the user's Ethereum account with the IPFS file hash.

User Validation

  • User visits the website
  • web3js gets the active Ethereum account
  • Read from the user contract to find the associated IPFS hash
  • Get file from IPFS
  • Read the JSON object
  • Extract the data from the JSON
  • Display data to user