Пользователь GUNjs не проходит аутентификацию в окне инкогнито

#reactjs #gun #decentralized-applications

Вопрос:

У меня очень странная проблема. У меня есть страница входа в систему в 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 amp;amp; 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>
  );
}
 

Ответ №1:

@пранава-мохан эй, это ошибка, при синхронизации профиля было условие гонки — при входе в систему проверялись учетные данные до завершения загрузки профиля.

Чтобы подтвердить, что это та же ошибка, с которой вы столкнулись: попробуйте несколько раз нажать «Войти» на другой странице. Входит ли он в систему при последующих попытках, даже если вы ничего не изменили? Тогда это был жучок.

Работаем над тем, чтобы это было исправлено в будущих версиях. До тех пор лучшее место, где можно получить помощь с ошибками, — это http://chat.gun.eco там мы отвечаем быстрее.

Прости меня за это! Пожалуйста, прокомментируйте, если это окажется чем-то другим.

Комментарии:

1. По какой-то причине проблема для меня была исправлена случайным образом.. Я не знаю, почему, но тот же код теперь отлично работает. Ранее пользователь не проходил проверку подлинности в окне инкогнито, но теперь он проходит проверку подлинности. Спасибо Марку Надалю за ваш ответ, продолжайте менять сеть!