0

我有一个非常奇怪的问题。我在 React 中有一个登录页面,用户可以在其中注册或登录。

当用户注册时,我在 GUNjs 中创建了一个用户。当我登录时,它会成功登录。但是,当我以隐身模式打开网站并尝试使用相同的凭据登录时,它说用户不存在。我也有一个对等服务器正在运行。对等服务器保存用户的数据,但仍然会发生这种情况。

我的代码:

decentralized_db.ts

  import GUN from "gun";
  import "gun/sea";
  import "gun/axe";

  export const db = GUN({
    peers: ["http://localhost:8765/gun"],
  });

  export const user = db.user().recall({ sessionStorage: true });

peerServer.js

gun = (Gun = require("gun"))({
  web: require("http").createServer(Gun.serve(__dirname)).listen(8765),
});

我的反应组件 loginPage.tsx::

import { useState } from "react";
import { user } from "../decentralized_db";

export default function LoginPage() {
  const [userCred, setUserCred] = useState({
    username: "",
    password: "",
  });

  function login(event: any) {
    event.preventDefault();
    user.auth(
      userCred.username,
      userCred.password,
      ({ err }: any) => err && alert(err)
    );
    console.log(user);
  }
  function signup(event: any) {
    event.preventDefault();
    user.create(userCred.username, userCred.password, ({ err }: any) => {
      if (err) {
        alert(err);
      } else {
        login(event);
      }
    });
  }

  function handleChange(event: any) {
    let name = event.target.name;
    let value = event.target.value;

    let clonedState: any = { ...userCred };
    clonedState[name] = value;

    setUserCred(clonedState);
  }

  return (
    <form>
      <label htmlFor="username">Username</label>
      <input
        onChange={handleChange}
        name="username"
        value={userCred.username}
        minLength={3}
        maxLength={16}
      />

      <label htmlFor="password">Password</label>
      <input
        onChange={handleChange}
        name="password"
        value={userCred.password}
        type="password"
      />

      <button className="login" onClick={login}>
        Login
      </button>
      <button className="login" onClick={signup}>
        Sign Up
      </button>
    </form>
  );
}
4

1 回答 1

1

@pranava-mohan 嘿,这是一个错误,配置文件同步中存在竞争条件 - 登录将在配置文件完成加载之前检查凭据。

要确认这与您遇到的错误相同:尝试在另一个页面上多次单击登录。即使您什么也没做,它是否会在以后的尝试中登录?然后这就是错误。

努力在未来的版本中修复此问题。在那之前,获得错误帮助的最佳地点是http://chat.gun.eco,我们在那里回复得更快。

对于那个很抱歉!如果它最终成为其他东西,请发表评论。

于 2021-09-18T19:31:25.130 回答