GUNjs 用户未在隐身模式下进行身份验证 window
GUNjs user not getting authenticated in incognito window
我有一个很奇怪的问题。我在 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),
});
我的 React 组件:
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>
);
}
@pranava-mohan 嘿,这是一个错误,配置文件同步中存在竞争条件 - 登录将在配置文件加载完成之前检查凭据。
要确认这与您遇到的错误相同:请尝试在其他页面上多次单击“登录”。它会在以后的尝试中登录吗,即使您什么也没做?那么这就是错误。
正在努力在未来的版本中修复此问题。在那之前,获得错误帮助的最佳地点是 http://chat.gun.eco 我们在那里回复得更快。
对此感到抱歉!如果它最终变成了别的东西,请发表评论。
我有一个很奇怪的问题。我在 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),
});
我的 React 组件:
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>
);
}
@pranava-mohan 嘿,这是一个错误,配置文件同步中存在竞争条件 - 登录将在配置文件加载完成之前检查凭据。
要确认这与您遇到的错误相同:请尝试在其他页面上多次单击“登录”。它会在以后的尝试中登录吗,即使您什么也没做?那么这就是错误。
正在努力在未来的版本中修复此问题。在那之前,获得错误帮助的最佳地点是 http://chat.gun.eco 我们在那里回复得更快。
对此感到抱歉!如果它最终变成了别的东西,请发表评论。