GUNjs 用户未在隐身窗口中获得身份验证

Posted

技术标签:

【中文标题】GUNjs 用户未在隐身窗口中获得身份验证【英文标题】:GUNjs user not getting authenticated in incognito window 【发布时间】:2021-11-03 07:07:39 【问题描述】:

我有一个非常奇怪的问题。我在 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>
  );

【问题讨论】:

【参考方案1】:

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

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

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

对不起!如果它最终成为其他东西,请发表评论。

【讨论】:

由于某种原因,我的问题得到了随机修复?。我不知道为什么,但是相同的代码现在可以正常工作。以前,用户未在隐身窗口中进行身份验证,但现在正在通过身份验证。感谢马克纳达尔的回答,继续改变网络!

以上是关于GUNjs 用户未在隐身窗口中获得身份验证的主要内容,如果未能解决你的问题,请参考以下文章

为啥注册用户未在 Firebase 中进行身份验证?为啥用户不能将产品添加到数据库 Firebase?

AFNetworking 2.0:凭据未在前一次请求的 30 秒内发送到身份验证

Firebause身份验证:已发送但未在特殊电子邮件地址(如*@gmx.at)上收到的电子邮件

未在工作灯中使用身份验证的推送通知错误

Windows身份验证中的浏览器弹出窗口

如何在本地 IdentityContext 中注册从外部身份验证提供程序获得的用户