dfinity开发——使用互联网身份(internet identity)登录

这篇具有很好参考价值的文章主要介绍了dfinity开发——使用互联网身份(internet identity)登录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

1.Internet Identity是由ICP支持的匿名区块链认证框架。用户可以创建自己的身份“锚”,将兼容的加密设备分配写入到当前设备,如笔记本电脑上的指纹传感器、手机上的面部识别系统,或便携式HSM,如YubiKey或Ledger钱包。然后,用户可以使用分配给他们的身份锚设备,注册验证ICP的dapp。这提供了很高的便利性,允许用户以极低的摩擦来验证他们感兴趣的dapp,同时受益于最高级别的加密安全性,但不需要直接管理或处理加密密钥材料。这样可以防止出错和关键材料被盗。系统对dapp进行了匿名化,每当一个锚与dapp交互时,dapp就会看到一个特别生成的假名,这可以防止用户在使用不同的dapp时被跟踪。每个用户可以创建任意数量的身份锚。
2.与大多数登录认证方法不同,Internet Identity 不需要设置和管理密码,也不需要向 dapps 或 Internet Identity 提供任何个人识别信息,这样大大的提高了安全性。
3.这里将演示如何使用Internet Identity身份,获取当前PID,使用的语言是motoko和ts。
4.工程源码地址:https://download.csdn.net/download/matt45m/85272218

项目流程

1.首先去dfinity的官网上下载编译Internet Identity,并按官方文档把Internet Identity编译成.wasm和.did文件。
2.创建项目

dfx new auth_client_demo

3.在index.html文件添加以下代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width" />
    <title>auth_demo</title>
    <base href="/" />

    <!-- <link type="text/css" rel="stylesheet" href="main.css" /> -->
  </head>
  <body>
    <form>
      <button id="btn_login" type="button">使用互联网身份登录</button>
    </form>
    <form>
      <span>当前PID:</span>
      <input id="pid"  type="text"  style="width: 400px" placeholder="当前 Principal ID" />
      <button id="btn_pid"  type="button">获取当前PID</button>
  </form>
  <form>
    <span>当前CID:</span>
    <input id="cid"  type="text"  style="width: 400px" placeholder="当前Canister ID" />
    <button id="btn_cid"  type="button">获取当前CID</button>
  </form>
  <form>
    <button id="btn_logout" type="button">退出登录</button>
  </form>
    <!-- <main id="pageContent"></main> -->
  </body>
</html>

4.在main.mo 文件添加以下代码

import Principal "mo:base/Principal";

actor Self
{
    public shared query ({caller}) func whoami() : async Principal
    {
       caller
    };

    public shared ({caller}) func getCanister() : async Principal
    {
         Principal.fromActor(Self);
    };
};

5.index.ts里面添加以下代码

import { AuthClient } from "@dfinity/auth-client";
import { canisterId, createActor } from "../../declarations/whoami";
import { Actor, Identity } from "@dfinity/agent";

var btn_login = document.getElementById("btn_login") as HTMLButtonElement;
var input_pid = document.getElementById("pid") as HTMLButtonElement;
var input_cid = document.getElementById("cid") as HTMLButtonElement;
var btn_pid = document.getElementById("btn_pid") as HTMLButtonElement;
var btn_cid = document.getElementById("btn_cid") as HTMLButtonElement;
var btn_logout = document.getElementById("btn_logout") as HTMLButtonElement;

var login_index = 0;

const init = async () => 
{
  const authClient = await AuthClient.create();

  if (await authClient.isAuthenticated())
  {
      handleAuthenticated(authClient);
  }


  const days = BigInt(1);
  const hours = BigInt(24);
  const nanoseconds = BigInt(3600000000000);

  //登录
  btn_login.onclick = async () => 
  {
    await authClient.login({onSuccess: async () => {handleAuthenticated(authClient);},
      identityProvider:process.env.DFX_NETWORK === "ic"
          ? "https://identity.ic0.app/#authorize": //线上internet identity canister ID
          "http://rrkah-fqaaa-aaaaa-aaaaq-cai.localhost:8000/#authorize",//本地internet identity canister ID
          //最大授权有效期为8天
          maxTimeToLive: days * hours * nanoseconds,
       });
       login_index = 1;
   };
};

async function handleAuthenticated(authClient: AuthClient) 
{
  const identity = (await authClient.getIdentity()) as unknown as Identity;
  const whoami_actor = createActor(canisterId as string, {agentOptions: {identity,},});
  authClient.idleManager?.registerCallback(() => 
  {
    Actor.agentOf(whoami_actor)?.invalidateIdentity?.();
  });

  //获取当前PID
  btn_pid.onclick = async () => 
  {
    if(login_index == 1)
    {
        try 
        {
          const response = await whoami_actor.whoami();
          console.log(response);
          input_pid.value =response.toString();
        } catch (error) 
        {
          console.error(error);
        }
    }
    else
    {
      input_pid.value ="当前 Principal ID";
    }
  };

  //退出登录
  btn_logout.onclick =async () => 
  {
      await authClient.logout();
      input_pid.value ="";
      input_cid.value = "";
      login_index = 0;
  };

  //获取当前canister ID
  btn_cid.onclick = async () =>
  {
    if(login_index == 1)
    {
        try 
        {
          const response = await whoami_actor.getCanister();
          input_cid.value =response.toString();
        } catch (error) 
        {
          console.error(error);
        }
    }
    else
    {
      input_cid.value ="当前 Canister ID";
    }
  };
}

init();

6.启动dfinity环境

dfx start --clean

7.在编译好的Internet Identity目录下创建canister.

dfx deploy internet_identity --argument '(null)'

identity.ic0.app 插入设置无法识别,dfinity,区块链,ICP,互联网身份,dfinity,motoko
把生成的Internet Identity canister id 复制到index.ts 本地internet identity canister ID

 identityProvider:process.env.DFX_NETWORK === "ic"
          ? "https://identity.ic0.app/#authorize": //线上internet identity canister ID
          "http://rrkah-fqaaa-aaaaa-aaaaq-cai.localhost:8000/#authorize",//本地internet identity canister ID

8.在本地部署项目

dfx deploy
npm install
npm start

9.访问 http://localhost:8080/
identity.ic0.app 插入设置无法识别,dfinity,区块链,ICP,互联网身份,dfinity,motoko
点击使用互联网身份登录
identity.ic0.app 插入设置无法识别,dfinity,区块链,ICP,互联网身份,dfinity,motoko

identity.ic0.app 插入设置无法识别,dfinity,区块链,ICP,互联网身份,dfinity,motoko

创建设备后按提前一步步注册完设备就可以了。

identity.ic0.app 插入设置无法识别,dfinity,区块链,ICP,互联网身份,dfinity,motoko
最终结果:
identity.ic0.app 插入设置无法识别,dfinity,区块链,ICP,互联网身份,dfinity,motoko文章来源地址https://www.toymoban.com/news/detail-781747.html

到了这里,关于dfinity开发——使用互联网身份(internet identity)登录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 物联网智能互联创新开发平台

    物联网智能互联创新开发平台在职业教育方面的发展前景广阔且充满潜力。随着物联网技术的不断发展和应用领域的扩大,对物联网专业人才的需求也在日益增长。因此,物联网智能互联创新开发平台在职业教育领域的应用将具有重要意义。 通过搭建以赛代教平台,学校可以

    2024年04月26日
    浏览(48)
  • 【架构】互联网应用开发架构演进历程

    首先我们了解下计算机软件的发展历史,大概总结概括,分为c/s时代,web1.0时代和web2.0时代。 c/s时代:富客户端方案。卖软件可赚钱。​例如 qq、影音、游戏。 1.0时代:主要是单向信息的发布,即信息门户—广大浏览器客户端​ ,互联网内容是由少数编辑人员(或站长)定制的

    2023年04月26日
    浏览(62)
  • 互联网开发中六个思维模型

    邓宁-克鲁格效应表明,没有经验的人往往会高估自己的能力,而有经验的人往往会低估自己的能力。 你不擅长某件事,但你会认为你擅长它。如果你擅长某事,你认为你不擅长 - 这可能导致冒名顶替综合症,这让你怀疑自己的能力,以至于你在其他具有相似技能的人中感到

    2024年02月05日
    浏览(49)
  • 互联网医院开发|在线问诊小程序搭建流程

    随着移动互联网的发展,传统医疗行业也在不断与时俱进,实现“互联网+医疗”,其中在线问诊小程序就是很好的例子,一起来了解在线问诊小程序解决方案, 在线问诊小程序 就是能够将互联网与医疗结合在一起的工具,借助在线问诊小程序,用户可以足不出门在家轻松看

    2024年02月13日
    浏览(47)
  • 工业互联网项目开发工作流程及核心问题

    工业互联网项目开发全流程V3.0   工业互联网项目开发工作流程及核心问题 一、需求分析 1、共享平台需求分析 这个平台要解决什么问题? 这个平台的用户群体是谁? 这个平台应该具备哪些主要功能? 这个平台的使用场景是什么? 这个平台如何与现有的系统集成? 2、需求

    2024年02月09日
    浏览(51)
  • Web3:打造一个公平、开发的价值互联网

    一场由 Web3掀起的互联网革新浪潮正在席卷全球,在人工智能、区块链、大数据、虚拟现实等各种信息技术的融合下,Web3打破了现实和数字世界的屏障,使数字化的进程更近一步。 Web3究竟是什么? 人们根据互联网的交互形式,将互联网分为了几个不同的版本,其中 Web1是一

    2024年02月11日
    浏览(48)
  • 工业互联网UWB定位系统源码,支持自定义开发

    工厂人员定位系统,采用UWB定位技术,通过在厂区内部署一定数量的定位基站,以及为人员、车辆、物资佩戴标签卡的形式,实时获取人员精确位置,精度高达10cm。 文末获取联系 工厂人员定位系统可实现物资/车辆实时定位,物资/车辆数量实时查询,全智能化的物资/车辆查

    2024年02月05日
    浏览(81)
  • 低代码开发:推动互联网企业数字化转型的关键因素

    nbsp; nbsp; nbsp; nbsp;联网行业作为我国数字经济发展的核心驱动力,在推动国家数字化转型中扮演着至关重要的角色。与其他传统行业相比,互联网企业面临更加紧迫的数字化转型需求,因为它们需要不断适应快速变化的市场环境和技术趋势。 nbsp; nbsp; nbsp; nbsp;然而,由于互联

    2024年03月11日
    浏览(71)
  • 元宇宙游戏开发APP软件把现实搬到互联网中

    元宇宙游戏开发随着元宇宙的声誉日益提升,越来越多的群体和行业开始关注元宇宙的趋势。许多大型企业已经抢先一步自行制作了专属的元宇宙虚拟展厅,开发元宇宙游戏,将线上和线下相结合,开启了新的推广和营销大门。董技叔源码哥发现自从广受认可的元宇宙元年

    2024年02月06日
    浏览(47)
  • iNeuOS工业互联网操作系统,“低代码”表单开发应用过程(一)

     iNeuOS工业互联网操作系统,“低代码”表单开发应用过程(一)   目       录 1.      概述... 2 2.      “低代码”表单开发应用过程... 2 1.   概述      iNeuOS工业互联网操作系统“表单设计”功能经过升级后,能够适用于更多应用场景,从业务上来讲可以扩展设备

    2024年04月08日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包