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