【问题标题】:A loose user creation for temporary game room (no account, no password)临时游戏室的松散用户创建(无帐户,无密码)
【发布时间】:2017-01-24 03:49:45
【问题描述】:

我正在尝试创建一个简单的游戏,其中为游戏会话生成房间并在游戏结束后销毁。我希望用户只需输入昵称即可加入此房间玩游戏。

我需要使用流星用户帐户还是有更简单的方法可以做到这一点,因为我不需要任何身份验证或密码。

我正在考虑只创建一个玩家集合并在他们单击加入房间时插入昵称,但我不知道如何跟踪“我是谁”或在他们失去联系时跟踪他们并且必须重新加入。

但如果我要使用用户帐户,我不知道如何对其进行自定义,以便在游戏会话后无需任何密码或电子邮件等就可以轻松创建并可能销毁临时/松散用户。

提前致谢!

【问题讨论】:

  • 如果用户刷新页面,是否需要保留会话?
  • @Khang 是的,我需要这样做,因为我发现有时由于连接问题等,用户可能需要刷新页面。
  • 我不认为用户帐户是必要的。我会有一个Players 集合,为每个新连接的浏览器创建一个新的播放器文档,并通过localStorage 将那个播放器的_id 存储在浏览器中

标签: meteor meteor-blaze meteor-accounts


【解决方案1】:

你可以只使用一个集合,但正如你所说,你仍然需要跟踪用户的 id,所以这需要一些努力。

就我个人而言,我会使用 Meteor 账户系统,使用 accounts-token 包:

https://atmospherejs.com/andrei/accounts-token

您可以在服务器上生成一个令牌,然后让用户登录。他们不需要知道自己已登录。

使用 Meteor 的帐户系统在跟踪用户方面有很多优势,如果在稍后阶段您确实希望人们使用帐户密码、帐户 Facebook 等登录,则无需重新构建您的应用程序。

【讨论】:

    【解决方案2】:

    您不需要使用 Meteor 的帐户系统。

    只需创建一个Rooms 集合,该集合中的每个文档都将是每个“游戏室”,或者您想怎么称呼它。然后在里面,添加一个“玩家”键并存储所有玩家或任何你需要的东西($pull 离开游戏的玩家,$push 加入的玩家)。游戏结束后,您可以通过其 _id 字段完全删除该 MongoDB 文档。

    类似:

        db.rooms = {
        _id: xzu90udfmd,
        players: [
        {
        tempUsername: "username1",
        tempWhatever: "whatever",
        token: 3zz97hrnw
        }, {
        tempUsername: "username2",
        tempWhatever: "whatever",
        token: 3zz97hrnw
        }, {
        tempUsername: "username3",
        tempWhatever: "whatever",
        token: 3zz97hrnw
        }
        ]
        };
    

    然后,您可以在单个用户对象中添加所有自定义项,也可以在可应用于整个游戏室的外部添加所有自定义项。使用 React,这样的事情会非常简单。

    【讨论】:

    • 但是如果玩家失去连接等,我该如何跟踪?是否像 @khang 建议的那样将他们的 _id 或令牌保留在 localStorage 中?
    • 如果此人失去连接,您还希望他能够连接回同一个房间吗?
    • 是的,您可以将他们的令牌保存在本地存储中,在模板呈现之前加载它,并与数据库中的 players 数组交叉引用它。如果玩家令牌匹配(localstorage/cookie 令牌匹配数据库中的用户令牌)&& 游戏房间状态未删除/完成,则渲染游戏房间。如果没有,请呈现“游戏结束”模板或您想要的 w/e。
    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2017-11-15
    相关资源
    最近更新 更多