在remix里面写完成用户登录的功能,当用户输入的用户名为:admin,密码为:admin123456 时,显示登录成功;当用户输入的用户名或密码不正确,则分别进行提示。完成源代码并进行调用认证。
时间: 2024-09-26 13:03:16 浏览: 9
在Remix框架中,我们通常会使用Solidity编写智能合约,并结合Web3.js等前端库处理用户交互。下面是一个简单的示例,展示如何在智能合约中实现用户登录功能:
```solidity
pragma solidity ^0.8.0;
contract LoginService {
// 用户映射,存储用户名和其对应的加密密码
mapping(string => bytes32) public users;
event UserLogin(address indexed user, string message);
function addUser(string memory _username, bytes32 _passwordHash) public {
users[_username] = _passwordHash;
}
function login(string memory _username, string memory _password) public view returns (bool success, string memory errorMessage) {
bytes32 passwordHash = keccak256(_password);
if (users[_username] == passwordHash) {
emit UserLogin(msg.sender, "登录成功");
return (true, "");
} else {
errorMessage = "用户名或密码错误";
return (false, errorMessage);
}
}
}
// 前端部分(使用web3.js)
import Web3 from 'web3';
async function handleLogin() {
const web3 = new Web3(Web3.givenProvider); // 使用合适的网络连接
const username = document.getElementById('username').value;
const password = document.getElementById('password').value;
const contractAddress = '0x...'; // 替换为实际的合约地址
const contract = new web3.eth.Contract(LoginService.abi, contractAddress);
try {
const result = await contract.methods.login(username, password).call();
console.log(result);
if (result[0]) {
alert("登录成功");
} else {
alert(result[1]);
}
} catch (error) {
console.error(error);
}
}
```
在这个例子中,`addUser`函数用于注册新用户,而`login`函数则是验证用户的输入是否匹配已注册的账户。前端通过web3.js调用合约的`login`方法并处理返回的结果。