Erstellen Sie eine Funktion zum Registrieren und Anmelden der von der Unity-Seite eingegebenen Informationen. Wie beim letzten Mal werden wir einen Anwendungsserver lokal mit Flask einrichten und verwenden.
[Letztes Mal]: [Unity (C #), Python] API-Kommunikationsstudiennotiz ② Starten Sie den lokalen Server mit Flask
Masakari ist alles in Ordnung, weil es viele unklare Interpretationen gibt. ** Besonders wenn es um Sicherheit geht, ist es peinlich, mich Ingenieur zu nennen ** Selbst wenn Sie es mit einem riesigen Masakari schneiden, werde ich es fest nehmen.
Sie können Ihr Konto registrieren, indem Sie Ihre ID und Ihr Passwort eingeben. Es ist möglich, sich tatsächlich auf dem Anmeldebildschirm anzumelden.
Es ist ein Bild von dem, was Sie tun.
Da die Informationen in der Datenbank gespeichert sind, werden die Kontoinformationen auch dann nicht gelöscht, wenn Sie den Editor schließen. (vielleicht)
Der von Unity durchgeführte Prozess besteht darin, die eingegebenen Informationen an den lokalen Server zu senden. Zeigen Sie einfach den Text als Antwort an.
Verarbeitung im Zusammenhang mit der Registrierungsschaltfläche
using System.Collections;
using UnityEngine.Networking;
using UnityEngine;
using System.Text;
using UnityEngine.UI;
public class RegistraionHTTPPost : MonoBehaviour {
[SerializeField, Header("LogText")]
Text m_logText;
[SerializeField, Header("IDInputField")]
InputField m_idInputField;
[SerializeField, Header("PassInputField")]
InputField m_passInputField;
//URL zum Verbinden
private const string RegistrationURL = "http://localhost:5000/registration";
//Benutzeroberfläche des Spielobjekts>Tasteninspektor> On Click()Methode zum Aufrufen von
public void Registration()
{
StartCoroutine(RegistrationCoroutine(RegistrationURL));
}
IEnumerator RegistrationCoroutine(string url)
{
//Informationen zu POST
WWWForm form = new WWWForm();
form.AddField("user_id", m_idInputField.text, Encoding.UTF8);
form.AddField("password", m_passInputField.text, Encoding.UTF8);
//Bereiten Sie die URL per POST vor
UnityWebRequest webRequest = UnityWebRequest.Post(url, form);
//Legen Sie den Puffer in UnityWebRequest fest
webRequest.downloadHandler = new DownloadHandlerBuffer();
//Stellen Sie eine Verbindung zur URL her und warten Sie, bis die Ergebnisse wieder angezeigt werden
yield return webRequest.SendWebRequest();
//Auf Fehler prüfen
if (webRequest.isNetworkError)
{
//Kommunikationsfehler
Debug.Log(webRequest.error);
m_logText.text = "Kommunikationsfehler";
}
else
{
//Erfolgreiche Kommunikation
Debug.Log("Post"+" : "+webRequest.downloadHandler.text);
m_logText.text = webRequest.downloadHandler.text;
}
}
}
Die folgenden Teile sind für das Senden von Informationen an den lokalen Server verantwortlich. Als Informationen, die von der lokalen Serverseite empfangen werden "Benutzer-ID", "Passwort" usw. werden als Anforderungsinformationen zu "Formular" hinzugefügt.
Informationen, die zum Zeitpunkt der Anfrage gesendet werden müssen
//Informationen zu POST
WWWForm form = new WWWForm();
form.AddField("user_id", m_idInputField.text, Encoding.UTF8);
form.AddField("password", m_passInputField.text, Encoding.UTF8);
Ich verstehe nicht im Detail,
form
scheint in der Lage zu sein, zusätzlich zur Art der Anfrage (POST, GET usw.) einige Informationen zu übergeben.
WWWForm
ist eine reine POST-Klasse.
Das ist wirklich schwierig, ** Was soll ich überhaupt tun ** Es war eine lange und schwierige Situation.
Zunächst fand ich heraus, dass es notwendig ist, eine DB (Datenbank) zu verwenden, um Kontoinformationen zu registrieren **.
Eine Datenbank (englisch: database, DB) ist eine Sammlung von Informationen, die zum einfachen Abrufen und Speichern organisiert sind. Normalerweise bezieht es sich auf das, was von einem Computer realisiert wird, aber manchmal wird ein Adressbuch aus Papier oder dergleichen als Datenbank bezeichnet. In einem Datenbanksystem, das einen Computer verwendet, wird häufig ein Datenbankverwaltungssystem verwendet, bei dem es sich um eine Software zum Verwalten der Datenbank handelt.
[Quelle]: [Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3 % 83% BC% E3% 82% B9)
Die Datenbank scheint Software zu sein. Wenn Sie tiefer graben, um zu verstehen, wo sich die Daten befinden und wie sie funktionieren, Ich denke nicht tief nach, weil eine großartige Person sagte, dass ich nicht zurückkommen könnte. [Referenzlink]: Woraus besteht eine Datenbank und wo und wie wird sie gespeichert? ..
Es gibt verschiedene Arten von DBs, und diesmal sieht es aus wie ** RDB (relationale Datenbank) **.
SQLAlchemy
Die Sprache SQL wird verwendet, um die Datenbank tatsächlich zu betreiben, aber eine Bibliothek, die dies in Python tut
[Quelle]: First Flask # 4 ~ Spielen wir mit der Datenbank mit SQLAlchemy ~
Korrekt. Es ist bequem! Dieses Mal werde ich dies verwenden.
Es ist endlich die Implementierung von Flask und DB.
import hashlib
from flask import *
from sqlalchemy import create_engine, Column, String, Integer
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, scoped_session
app = Flask(__name__)
engine = create_engine('sqlite:///user.db')
Base = declarative_base()
#DB-Einstellungen
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True, unique=True)
user_id = Column(String)
password = Column(String)
Base.metadata.create_all(engine)
SessionMaker = sessionmaker(bind=engine)
session = scoped_session(SessionMaker)
#Registrieren Sie ID und Passwort in der DB
@app.route("/registration", methods=["POST"])
def registration():
user = request.form["user_id"].strip()
check_users = session.query(User).filter(User.user_id == user).all()
if check_users:
return "Dieser Benutzername wurde verwendet"
else:
user = User(user_id=request.form["user_id"], password=str(hashlib.sha256(
request.form["password"].strip().encode("utf-8")).digest()))
session.add(user)
session.commit()
return str(user.user_id.strip() + "Herr\n Vielen Dank für Ihre Registrierung")
#Überprüfen Sie die Datenbank, um festzustellen, ob eine Kombination aus ID und Kennwort angemeldet werden kann
@app.route("/login", methods=["POST"])
def login_check():
user = request.form["user_id"].strip()
check_users = session.query(User).filter(User.user_id == user).all()
try:
for login_user in check_users:
login_user_pass = login_user.password
if login_user_pass == str(hashlib.sha256(
request.form["password"].strip().encode("utf-8")).digest()):
return "Die Anmeldung ist abgeschlossen"
else:
return "Das Passwort ist anders"
except:
return "Registrierungsinformationen sind unterschiedlich"
if __name__ == "__main__":
app.run(debug=True)
# User.__table__.drop(engine) #Zum Löschen von Tabellen
Wenn Sie den folgenden Teil auskommentieren und verschieben, verschwindet er.
User.__table__.drop(engine) #Zum Löschen von Tabellen
Ich schreibe Pyhton in VSC, aber Flask kam mit Pylint nicht klar.
Daher habe ich Setting.json geöffnet und die folgenden Einstellungen hinzugefügt.
"python.linting.pylintArgs": [
"--load-plugins",
"pylint_flask"
],
Dieses Mal wollte ich ** Hashing machen und Sicherheitsmaßnahmen sind perfekt! ** Gegenwärtig wurde nur Teil (2) erstellt, daher halte ich es für völlig bedeutungslos. Es gibt viele Artikel, die besagen, dass die Verwendung von POST nicht ausreicht. Ich frage mich, ob alle Informationen, die ausgetauscht werden sollen, gehasht werden müssen. Wenn Sie mehr über diesen Bereich wissen, lassen Sie es mich bitte wissen.
Ich fand es heraus, als ich die Sicherheit untersuchte. Es scheint, dass es verschiedene Arten der Authentifizierung gibt.
Die Digest-Authentifizierung ist der Standardauthentifizierung in Bezug auf die Sicherheit überlegen. Es ist jedoch nicht mit allen Umgebungen kompatibel. Wenn Sie die Umgebung des Benutzers kennen, der die Seite in gewissem Umfang verwendet, und einen kompatiblen Browser verwenden, gibt es kein Problem. Die Digest-Authentifizierung eignet sich jedoch nicht zum Festlegen einer Seite für eine nicht angegebene Anzahl von Benutzern.
Andererseits ist die Standardauthentifizierung in Bezug auf die Sicherheit der Digest-Authentifizierung unterlegen. Es sollte jedoch kein Problem geben, wenn Sie es in einer Umgebung verwenden, in der Sicherheitsmaßnahmen im Voraus ergriffen werden, z. B. SSL oder in einem lokalen Netzwerk. Dies hängt nicht von der Umgebung des Benutzers ab.
Auf diese Weise wird beim Festlegen der Benutzerauthentifizierung auf einer Seite, die von einer nicht angegebenen Anzahl von Benutzern verwendet wird, die Standardauthentifizierung in Kombination mit SSL und die Digestauthentifizierung verwendet, wenn die Verbindungsumgebung, z. B. ein Administrator, abhängig von der Situation angegeben wird. Ist üblich.
Entspricht die diesmal implementierte der sogenannten Basisauthentifizierung? Ich bin mir nicht sicher, also würde ich gerne wissen, weil es in Ordnung ist zu sagen: "Du hast es auch nicht geschafft."
[Python ORM] Zusammenfassung grundlegender SQL-Abfragen mit SQL Alchemy
Recommended Posts