使用solidity编写登录注册

1.登录
1.定义结构体

 struct user{

        uint id;

        string name;

        string password;

        string account;

    }

   uint256 cIId;

 2.定义mapping映射

 mapping(uint256 => confirm) public Confirmmapping;

3.编写方法

function register(string memory _name,string memory _password,string memory _confirm,string memory _account) public returns(uint256){

        bytes32 str1Hash = keccak256(abi.encode(_password));

        bytes32 str2Hash = keccak256(abi.encode(_confirm));

        require(str1Hash == str2Hash,"Password inconsistency");

        user storage information = Usermapping[Id];

        information.name = _name;

        information.password = _password;

        information.account = _account;

        information.id = 0;

        cIId += 1;

        information.id = cIId;

        return cIId;

    }

2.注册
1.编写方法

function login(string memory laccount,string memory lpassword) public view returns(string memory){

        bytes32 str1Hash = keccak256(abi.encode(laccount));

        bytes32 str2Hash = keccak256(abi.encode(lpassword));

        for (uint i; i <= Id; i++) {

           if(str1Hash == keccak256(abi.encode(Usermapping[i].name))){

               require(str2Hash == keccak256(abi.encode(Usermapping[i].password)),"Password wrong!");

               return '1';

           }

        }

        return "false";

    }

登录成功则会返回1,可以在前端使用web3获得返回值来判断语句来看自己是否登录成功。

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Solidity 合约,用于实现基本的登录和注册功能: ```solidity pragma solidity ^0.8.0; contract Login { struct User { string username; string password; } mapping(address => User) private users; event UserRegistered(address indexed user, string username); event UserLoggedIn(address indexed user, string username); function register(string memory _username, string memory _password) public { require(bytes(_username).length > 0, "Username can't be empty"); require(bytes(_password).length > 0, "Password can't be empty"); require(users[msg.sender].username == "", "User already registered"); users[msg.sender] = User(_username, _password); emit UserRegistered(msg.sender, _username); } function login(string memory _username, string memory _password) public view returns(bool) { require(bytes(_username).length > 0, "Username can't be empty"); require(bytes(_password).length > 0, "Password can't be empty"); User storage user = users[msg.sender]; if (keccak256(bytes(user.username)) == keccak256(bytes(_username)) && keccak256(bytes(user.password)) == keccak256(bytes(_password))) { emit UserLoggedIn(msg.sender, _username); return true; } else { return false; } } } ``` 该合约中定义了一个名为 `User` 的结构体,用于存储用户名和密码。使用 `mapping` 将每个用户的地址映射到其对应的 `User` 结构体中。 其中,`register` 函数用于注册新用户,并在注册成功后触发 `UserRegistered` 事件;`login` 函数用于验证用户登录信息,并在验证成功后触发 `UserLoggedIn` 事件。 在实际应用中,建议使用更加安全的加密算法存储用户密码,以保障用户信息的安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值