Как я могу использовать OpenID для Steam для печати полей пользователя в другой базе данных?

Хорошо, у меня есть следующий код 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 пользователи входят в свою учетную запись Steam через OpenID. Я могу получить SteamID пользователя с этим при входе в систему, и для этого даже есть переменная. Мне нужно использовать эту переменную SteamID, когда они вошли в систему, чтобы указать, какая строка находится в базе данных, и напечатать ТОЛЬКО зарегистрированные поля профиля пользователя, а не просто печатать все строки в базе данных. Это будет сделано с использованием SteamID пользователя, который входит в систему, и который будет сравниваться с полем SteamID в моей базе данных, чтобы он знал, кем вы являетесь, когда вы входите в систему.

Я не знаю, как это сделать, поэтому я публикую здесь. Мне просто нужен код PHP или какая-то помощь в его написании. Спасибо вам большое! Вся помощь очень ценится!

0

Решение

У вас есть несколько связанных проблем, которые требуют дополнительного исследования. Поскольку я проголосовал за то, чтобы закрыть вопрос как слишком широкий, я отмечу этот ответ как Вики сообщества. Я действительно хочу помочь, но, как и ценности сообщества, я бы посоветовал вам принять следующие моменты и использовать их в качестве возможности для дальнейших исследований в поисковых системах. Ваш пост «просто [нужен] код PHP» «- это запрос на бесплатную работу, который мы пытаемся отговорить здесь.

я считать Я понимаю проблему, но у меня нет опыта работы со Steam API, поэтому вам может понадобиться прочитать их документы и адаптировать следующее. Если вы ранее не пользовались API или сессиями, найм фрилансера в вашем районе может быть самым быстрым и легким путем для продвижения вашего проекта в пути. Вам может потребоваться всего несколько часов их времени, поэтому оно не должно быть дорогим.

  1. Ваш скрипт OpenID должен предоставить вашему приложению один из идентификаторов профиля, который вы описали. Когда пользователь впервые создает учетную запись на вашем сайте, вам необходимо захватить этот идентификатор профиля и сохранить его в сопоставлении с другой интересующей вас информацией. На этом этапе вы должны запустить процедуру преобразования, чтобы у вас был другой идентификатор профиля, и затем вы можете сохранить его.
  2. Когда пользователь входит в систему, вам необходимо создать сеанс. Обычно это так же просто, как использовать session_start() и затем сохранение первичного ключа записи пользователя в качестве переменной, таким образом:

    $_SESSION['user_id'] = $userId;
    

    Идентификатор пользователя будет получен на экране входа в систему, где вы получите обратный вызов OpenID, чтобы доказать, что текущий пользователь действительно обладает идентификатором профиля Steam, который он вам предоставил. Настройка сеанса означает, что на любой последующей странице, просматриваемой пользователем, будет доступен их идентификатор пользователя, пока он не выйдет из системы. Это означает, что вам не нужно делать вызов OpenID на каждой странице.

  3. Используя этот идентификатор сеанса, теперь вы можете получить любой из идентификаторов профиля, который вам требуется, так как они оба находятся в вашей базе данных. Это тривиально SELECT работа с базой данных с использованием идентификатора сеанса, который вы можете прочитать $_SESSION['user_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, provider полезно, если вы позволяете пользователю выбирать из нескольких систем авторизации (Steam — другая), и, конечно, last_login_at говорит само за себя.


Я также советовал в комментариях, что вам, возможно, придется написать этот код. Повторное использование библиотеки — это похвальная привычка, но, к сожалению, библиотеки не для всех случаев — иногда программисту просто нужно что-то написать самому. Мы часто видим запросы по переполнению стека для «библиотеки / учебника / пошагового руководства для [проекта X]» здесь, и если читатели смогут убедить авторов, что программирование на самом деле не так, они будут передаваться очень полезный урок.

Итак, попробуйте выше в порядке? Не стесняйтесь обращаться за дополнительной помощью, если я неправильно понял некоторую основную часть структуры, но в противном случае, пожалуйста, используйте ключевые слова, которые я упомянул, и вставьте их в поисковую систему. Это единственный способ учиться. Удачи!

0

Другие решения

Это было на самом деле довольно просто. Сначала я взял переменную SteamID 64 $ steamid и провел ее через это преобразование, которое выведет 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: 000000000.

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

Теперь я могу использовать $ steamID в качестве переменной на любой странице, на которой я включаю этот код. Я ответил на это сам, так что если у кого-то еще будут проблемы с этим, как я изначально, ответ будет здесь для них 🙂

0

По вопросам рекламы [email protected]