如何使用 OpenID for Steam 在不同的数据库上打印用户的字段


How can I use OpenID for Steam to print user's fields on a different database?

我有以下PHP代码:

<php>
$servername = "host";
$username = "username";
$password = "password";
$dbname = "db";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} 
$sql = "SELECT steamid, bananas FROM es_player";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "PLAYER'S STEAM ID: " . $row["steamid"]. " - PLAYER'S BANANAS: " 
.$row["bananas"]. " <br>";
}
} else {
echo "0 results";
}
$conn->close();
?>

它只是从我的数据库中获取特定字段。当用户登录时,他们使用OpenID,而不是通过我控制的实际数据库。它是通过Steam,用户通过OpenID使用他们的Steam帐户登录。我可以在用户登录时使用它获取用户的 SteamID,甚至还有一个变量。

我需要在他们登录时使用此 SteamID 变量来指定他们在数据库中的哪一行,并仅打印登录用户的配置文件字段,而不仅仅是打印数据库中的所有行。这将使用登录用户的 SteamID 来完成,该 ID 将与我的数据库上的 SteamID 字段进行比较,以便在您登录时知道您是哪个用户。

我不知道如何做到这一点,这就是我在这里发布的原因。我只需要PHP代码,或者一些帮助编写它。

您有几个需要更多研究的相关问题。由于我投票决定关闭这个问题,因为它太宽泛了,我将这个答案标记为社区维基。我真的很想提供帮助,但与这里的社区价值观一样,我鼓励您采取以下几点,并将其用作进一步搜索引擎研究的途径。您的帖子"只需要 [需要] PHP 代码"是对免费工作的请求,我们在这里试图阻止。

我想我理解这个问题,但我没有 Steam API 的经验,所以您可能需要阅读他们的文档并调整以下内容。如果您以前没有使用过 API 或会话,那么在您所在地区雇用自由职业者可能是让您的项目上路的最快、最简单的途径。您可能只需要几个小时的时间,因此不必昂贵。

  1. OpenID 脚本应将您描述的配置文件 ID 之一传送到应用程序。当用户首次在您的网站中创建帐户时,您需要捕获该配置文件 ID 并将其与其他感兴趣的信息进行存储。此时,您应该运行转换例程,以便您拥有另一个配置文件 ID,然后也可以存储该 ID。
  2. 当用户登录时,您需要创建一个会话。这通常很简单,只需使用 session_start()然后将用户记录主键另存为变量,因此:

    $_SESSION['user_id'] = $userId;
    

    用户 ID 将来自您的登录屏幕,您可以在其中获得 OpenID 回调,以证明当前用户确实拥有他们提供给您的 Steam 个人资料 ID。设置会话意味着用户浏览的任何后续页面都将具有可用的用户 ID,直到他们注销。这意味着您不需要在每个页面上执行 OpenID 调用。

  3. 使用此会话 ID,您现在可以获取所需的任一配置文件 ID,因为它们都在数据库中。这是一个涉及会话 ID 的简单SELECT数据库操作,您可以从 $_SESSION['user_id] 读取该 ID 。

这是我编写的OAuth应用程序中的一个表示例(它是开源的,所以如果你愿意,你可以把它拆开)。当用户登录时,将创建此记录(如果不存在)或更新(如果存在):

mysql> SELECT * FROM user_auth;
+----+---------+---------------------------+----------+---------------------+
| id | user_id | username                  | provider | last_login_at       |
+----+---------+---------------------------+----------+---------------------+
|  1 |       1 | https://github.com/halfer | github   | 2015-01-13 18:05:49 |
+----+---------+---------------------------+----------+---------------------+
1 row in set (0.00 sec)

username是 OpenID 标识符,如果您允许用户从多个授权系统中进行选择(Steam 是另一个),则provider很有用,当然last_login_at是不言自明的。


我还在评论中建议您可能需要编写此代码。库重用是一个值得称赞的习惯,但不幸的是,没有一个库可以满足所有可能性 - 有时程序员只需要自己写一些东西。我们经常在 Stack Overflow 上看到"[项目 X] 的库/教程/分步指南"的请求,如果读者能够说服海报编程并不是真的那样,他们将传递一个非常有用的课程。

那么,按顺序尝试上述操作吗?如果我误解了结构的某些基本部分,请随时寻求进一步的帮助,但除此之外,请使用我提到的关键字并将它们弹出到搜索引擎中。这是唯一的学习方式。祝你好运!

这其实很简单。首先,我$steamid SteamID 64 变量并运行它进行此转换,这将输出 SteamID 32

$id = $steamid;
function parseInt($string) {
    if(preg_match('/('d+)/', $string, $array)) {
        return $array[1];
    } else {
        return 0;
    }}
$steamY = parseInt($id);
$steamY = $steamY - 76561197960265728;
$steamX = 0;
if ($steamY%2 == 1){
$steamX = 1;
} else {
$steamX = 0;
}
$steamY = (($steamY - $steamX) / 2);

然后为了完成它,我只是做了一个变量,将其组合成完整的 STEAM_0:0000000000 组合。

$steamID = "STEAM_0:" . (string)$steamX . ":" . (string)$steamY;

我现在可以使用$steamID作为包含此代码的任何页面上的变量。我自己回答了这个问题,所以如果其他人像我最初一样对此有麻烦,答案将在这里为他们:)