Maison > développement back-end > tutoriel php > Comment créer un enregistreur Pokemon Spays Localiers avec Couchdb

Comment créer un enregistreur Pokemon Spays Localiers avec Couchdb

Joseph Gordon-Levitt
Libérer: 2025-02-10 12:01:13
original
639 Les gens l'ont consulté

Comment créer un enregistreur Pokemon Spays Localiers avec Couchdb

Dans un article précédent, vous avez été présenté à CouchDB. Cette fois, vous allez créer une application à part entière où vous pouvez appliquer les choses que vous avez apprises. Vous allez également apprendre à sécuriser votre base de données à la fin du tutoriel.

Les plats clés

  • Utiliser CouchDB amélioré avec le plugin GeoCouch pour enregistrer et récupérer efficacement les données géospatiales sur les emplacements de pose de pokemon.
  • Configurez un environnement de développement robuste à l'aide de Homestead améliorée et Docker pour gérer les dépendances et assurer un paramètre de développement cohérent sur différentes machines.
  • Implémentez le cadre mince et les packages PHP supplémentaires pour faciliter le développement du backend, permettant une communication efficace avec l'API Pokemon et Couchdb.
  • Sécurisez votre installation Couchdb en configurant les administrateurs de serveurs et les administrateurs de base de données pour éviter un accès et des modifications non autorisés à votre base de données.
  • Utilisez l'API Google Maps pour permettre aux utilisateurs de localiser et d'enregistrer les emplacements exacts des poseurs Pokemon, en améliorant l'interactivité et la fonctionnalité de l'application.
  • Implémentez les fonctionnalités de frontend utilisant JavaScript et diverses bibliothèques pour fournir une interface utilisateur réactive, y compris les interactions MAP, la recherche de localisation et les fenêtres modales pour l'entrée de données.
  • Assurez-vous que l'application est sécurisée en mettant à jour le fichier .env avec des informations d'identification CouchDB et en modifiant le constructeur de classe DB pour inclure ces informations d'identification dans l'uri de base.

Aperçu du projet

Vous allez construire un enregistreur Pokemon Spawn Locations.

Cela permettra aux utilisateurs d'enregistrer les emplacements des monstres qu'ils rencontrent sur Pokemon Go. Google Maps sera utilisé pour rechercher des emplacements et un marqueur placé pour identifier l'emplacement exact. Une fois que l'utilisateur est satisfait de l'emplacement, le marqueur peut être interagi, lorsqu'il affichera une boîte modale qui permet à l'utilisateur de saisir le nom du Pokémon et d'enregistrer l'emplacement. Lorsque le prochain utilisateur arrive et recherche le même emplacement, les valeurs ajoutées par les utilisateurs précédents seront tracées dans la carte en tant que marqueurs. Voici à quoi ressemblera l'application:

Comment créer un enregistreur Pokemon Spays Localiers avec Couchdb

Le code source complet du projet est disponible sur github.

Configuration de l'environnement de développement

Si vous n'avez pas un bon environnement de développement isolé, il est recommandé d'utiliser Homestead amélioré.

La boîte ne vient pas avec CouchDB installée, vous devrez donc le faire manuellement; Mais pas seulement Couchdb. L'application doit fonctionner avec Geo Data (Latitudes et longitudes): vous fournirez CouchDB les informations de la boîte de délimitation de Google Maps. Le boîtier de délimitation représente la zone actuellement en cours sur la carte, et toutes les coordonnées précédentes que les utilisateurs ont ajoutées à cette zone seraient également affichées sur la carte. Couchdb ne peut pas le faire par défaut, c'est pourquoi vous devez installer un plugin appelé GeoCCH afin de donner à Couchdb des superpuissances spatiales.

La façon la plus simple de le faire est au moyen du conteneur Docker GeoCouch. Vous pouvez également essayer d'installer GeoCouch manuellement, mais cela vous oblige à installer CouchDB à partir de la source et à tout configurer à la main. Je ne recommande pas vraiment cette méthode à moins que vous ayez une barbe Unix.

Allez-y et installez Docker dans la machine virtuelle que vous utilisez, et revenez ici une fois que vous avez terminé.

Installation de GeoCouch

Tout d'abord, clonez le repo et naviguez à l'intérieur du répertoire créé.

<span>git clone git@github.com:elecnix/docker-geocouch.git
</span><span>cd docker-geocouch
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ensuite, ouvrez le dockerfile et remplacez le script pour obtenir Couchdb par les suivants:

# Get the CouchDB source
RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$
    tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Vous devez le faire car l'URL de téléchargement qui est actuellement utilisée est déjà échoué.

Construisez l'image docker:

<span>docker build -t elecnix/docker-geocouch:1.6.1 .
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Cela prendra un certain temps en fonction de votre connexion Internet, alors allez prendre une collation. Une fois cela fait, créez le conteneur et démarrez-le:

<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1
</span><span>docker start <container id>
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Une fois qu'il a commencé, vous pouvez tester pour voir s'il s'exécute en exécutant la commande suivante:

<span>curl localhost:5984
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

en dehors de la machine virtuelle, si vous transférez correctement les ports, ce sera:

<span>curl 192.168.33.10:5984
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Il devrait renvoyer ce qui suit:

<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Notez que je me référerai constamment à 192.168.33.10 tout au long de l'article. Il s'agit de l'IP affectée à Scotchbox, qui est la boîte vagabond que j'ai utilisée. Si vous utilisez Homestead amélioré, l'IP est 192.168.10.10. Vous pouvez utiliser cette IP pour accéder à l'application. Si vous utilisez autre chose, adaptez-vous au besoin.

Configuration du projet

Vous allez utiliser le framework Slim pour accélérer le développement de l'application. Créez un nouveau projet en utilisant Composer:

php <span>composer create-project slim/slim-skeleton pokespawn
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Pokespawn est le nom du projet, alors allez-y et accédez à ce répertoire une fois le compositeur terminé l'installation. Ensuite, installez les packages supplémentaires suivants:

<span>composer require danrovito/pokephp guzzlehttp/guzzle gregwar/image vlucas/phpdotenv
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Voici un bref aperçu de chacun:

  • danrovito / pokephp - pour parler facilement à l'API Pokemon.
  • Guzzlehttp / Guzzle - pour faire des demandes au serveur Couchdb.
  • Gregwar / Image - Pour redimensionner les sprites Pokémon renvoyé par l'API Pokemon.
  • vlucas / phpdotenv - pour stocker les valeurs de configuration.

Configuration de la base de données

Accédez à Futon à partir du navigateur et créez une nouvelle base de données appelée Pokespawn. Une fois créé, entrez dans la base de données et créez une nouvelle vue. Vous pouvez le faire en cliquant sur la liste déroulante de la vue et en sélectionnant une vue temporaire. Ajoutez ce qui suit à l'intérieur de la TextArea pour la fonction MAP:

<span>git clone git@github.com:elecnix/docker-geocouch.git
</span><span>cd docker-geocouch
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Comment créer un enregistreur Pokemon Spays Localiers avec Couchdb

Une fois cela fait, cliquez sur le bouton Enregistrer en tant qu'ajoutez Pokemon comme nom du document de conception et par_name comme nom de vue. Appuyez sur Enregistrer pour enregistrer la vue. Plus tard, vous utiliserez cette vue pour suggérer des noms Pokémon en fonction de ce que l'utilisateur a entré.

Comment créer un enregistreur Pokemon Spays Localiers avec Couchdb

Ensuite, créez un document de conception pour répondre aux recherches spatiales. Vous pouvez le faire en sélectionnant des documents de conception dans la liste déroulante de la vue, puis cliquez sur un nouveau document. Une fois dans la page pour créer un document de conception, cliquez sur le bouton Ajouter un champ et ajoutez spatial comme nom de champ, et les suivants comme valeur:

# Get the CouchDB source
RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$
    tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ce document de conception utilise les fonctions spatiales fournies par GeoCHY. La première chose qu'il fait est de vérifier si le document contient un champ LOC. Le champ LOC est un tableau contenant les coordonnées d'un emplacement spécifique, avec le premier élément contenant la latitude et le deuxième élément contenant la longitude. Si le document répond à ces critères, il utilise la fonction EMIT () comme une vue normale. La clé est une géométrie Geojson et la valeur est un tableau contenant le nom du pokemon et du sprite.

Lorsque vous faites une demande au document de conception, vous devez spécifier le start_range et le end_Range qui a le format d'un tableau JSON. Chaque élément peut être un nombre ou un null. Null est utilisé si vous voulez une gamme ouverte. Voici un exemple de demande:

<span>docker build -t elecnix/docker-geocouch:1.6.1 .
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

et sa sortie:

<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1
</span><span>docker start <container id>
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Si vous souhaitez en savoir plus sur les opérations spécifiques que vous pouvez faire avec GeoCouch, assurez-vous de lire la documentation ou le wiki.

Création du projet

Maintenant, vous êtes prêt à écrire du code. Vous allez d'abord jeter un œil au code du back-end, puis passer au code frontal.

poke l'importateur

L'application nécessite que certaines données Pokemon soient déjà dans la base de données avant de pouvoir être utilisées, donc la nécessité d'un script qui n'est exécuté que localement. Créez un fichier poke-importer.php à la racine de votre répertoire de projet et ajoutez ce qui suit:

<span>git clone git@github.com:elecnix/docker-geocouch.git
</span><span>cd docker-geocouch
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ce script fait une demande au point de terminaison Pokedex de l'API Pokemon. Ce point de terminaison nécessite l'ID de la version PokeDEX que vous souhaitez qu'il retourne. Étant donné que Pokemon Go permet actuellement aux joueurs d'attraper Pokemon dès la première génération, fournit 2 comme ID. Cela renvoie tous les Pokémon de la région de Kanto du jeu Pokémon original. Ensuite, parcourez les données, extraire toutes les informations nécessaires, enregistrez le sprite et créez un nouveau document à l'aide des données extraites.

routes

Ouvrez le fichier src / routes.php et ajoutez les routes suivantes:

# Get the CouchDB source
RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$
    tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

chacun des itinéraires répondra aux actions qui peuvent être effectuées dans l'application. L'itinéraire racine renvoie la page d'accueil, l'itinéraire de recherche renvoie les suggestions de noms de pokemon, l'itinéraire de sauvegarde enregistre l'emplacement et l'itinéraire de fetch renvoie le pokemon à un emplacement spécifique.

Contrôleur domestique

Dans le cadre du répertoire SRC, créez un dossier App / Controllers et à l'intérieur, créez un fichier HomeController.Php. Cela exécutera toutes les actions nécessaires pour chacun des itinéraires. Voici le code:

<span>docker build -t elecnix/docker-geocouch:1.6.1 .
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Le contrôleur d'origine utilise le $ Renderer qui est passé via le constructeur pour rendre la page d'accueil de l'application. Il utilise également la classe DB que vous créerez sous peu.

parler à Couchdb

Créez un fichier utils / db.php sous le répertoire APP. Ouvrez le fichier et créez une classe:

<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1
</span><span>docker start <container id>
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

À l'intérieur de la classe, créez un nouveau client de Guzzle. Vous utilisez Guzzle au lieu de certains clients PHP pour CouchDB parce que vous pouvez faire tout ce que vous voulez.

<span>curl localhost:5984
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
La configuration provient du fichier .env à la racine du projet. Cela contient l'URL de base de Couchdb.

<span>curl 192.168.33.10:5984
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
SearchPokemon est responsable du renvoi des données utilisées par la fonctionnalité automatique-saut. Étant donné que CouchDB ne prend pas en charge la condition similaire à laquelle vous êtes habitué à SQL, vous utilisez un petit piratage pour l'imiter. L'astuce ici consiste à utiliser start_key et end_key au lieu de simplement clé qui ne renvoie que des correspondances exactes. FFF0 est l'un des caractères Unicode spéciaux alloués à la toute fin du plan multilingue de base. Cela en fait un bon candidat pour ajouter à la fin de la recherche réelle, ce qui fait que le reste des personnages devient facultatif en raison de sa valeur élevée. Notez que ce piratage ne fonctionne que pour les mots courts, il est donc plus que suffisant pour rechercher des noms de pokemon.

<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
MakeGetRequest est utilisé pour effectuer les demandes de lecture à CouchDB et makePostRequest pour écrire.

php <span>composer create-project slim/slim-skeleton pokespawn
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
SavePokEmonlocation enregistre les coordonnées auxquelles le marqueur Google Map pointe actuellement, ainsi que le nom et le sprite. Un champ DOC_TYPE est également ajouté pour une récupération facile de tous les documents liés aux emplacements.

<span>composer require danrovito/pokephp guzzlehttp/guzzle gregwar/image vlucas/phpdotenv
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
IsvalidCoordine vérifie si les valeurs de latitude et de longitude ont un format valide.

<span>git clone git@github.com:elecnix/docker-geocouch.git
</span><span>cd docker-geocouch
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

FetchPokemons est la fonction qui fait la demande au document de conception pour la recherche spatiale que vous avez créée plus tôt. Ici, vous spécifiez les coordonnées du Sud-Ouest comme valeur pour le start_range et le nord-est des coordonnées comme valeur pour la fin_Range. La réponse est également limitée aux 100 premières lignes pour éviter de demander trop de données. Plus tôt, vous avez également vu qu'il y a des données renvoyées par CouchDB qui ne sont pas vraiment nécessaires. Il serait utile d'extraire, puis de retourner uniquement les données nécessaires à l'avant. J'ai choisi de laisser cela comme une optimisation pour un autre jour.

# Get the CouchDB source
RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$
    tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

HandlerResponse convertit La chaîne JSON renvoyée par Couchdb en un tableau.

<span>docker build -t elecnix/docker-geocouch:1.6.1 .
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ouvrez Composer.json au répertoire racine et ajoutez ce qui suit juste en dessous de la propriété Require, puis exécutez Composer Dump-Autoload. Cela vous permet d'autoder tous les fichiers dans le répertoire SRC / App et de le rendre disponible dans l'espace de noms de l'application:

<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1
</span><span>docker start <container id>
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Enfin, injectez le contrôleur domestique dans le conteneur. Vous pouvez le faire en ouvrant le fichier SRC / Dependance.php et ajouter ce qui suit en bas:

<span>curl localhost:5984
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Cela vous permet de passer le rendu à la brindille au contrôleur d'origine et de rendre HomeController accessible à partir du routeur.

Modèle de page d'accueil

Maintenant, vous êtes prêt à procéder avec le front-end. Tout d'abord, créez un fichier Templates / index.html à la racine du répertoire du projet et ajoutez ce qui suit:

<span>curl 192.168.33.10:5984
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

dans le se trouvent les styles des différentes bibliothèques que l'application utilise, ainsi que les styles de l'application. Dans le se trouvent le champ de texte pour la recherche de lieux, le conteneur de carte et le modal pour enregistrer un nouvel emplacement. Ci-dessous, les scripts utilisés dans l'application. N'oubliez pas de remplacer votre_googlemap_apikey dans le script Google Maps par votre propre clé API.

javascript

Pour le fichier JavaScript principal (public / js / main.js), créez d'abord des variables pour stocker des valeurs dont vous aurez besoin dans tout le fichier.

<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ensuite, créez la fonction pour initialiser la carte. Un min_zoomlevel est spécifié pour empêcher les utilisateurs de zoomer jusqu'à ce qu'ils puissent voir l'intégralité de la carte du monde. Vous avez déjà ajouté une limite aux résultats qui peuvent être renvoyés par CouchDB, mais c'est également un bel ajout pour empêcher les utilisateurs de s'attendre à ce qu'ils puissent sélectionner des données du monde entier.

php <span>composer create-project slim/slim-skeleton pokespawn
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Créez le marqueur pour les emplacements de pointage que les utilisateurs souhaitent ajouter. Ensuite, ajoutez un écouteur d'événements pour ouvrir le modal pour ajouter des emplacements lorsque le marqueur est enfoncé:

<span>composer require danrovito/pokephp guzzlehttp/guzzle gregwar/image vlucas/phpdotenv
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Initialiser la zone de recherche:

<span>function(doc){
</span>  <span>if(doc.doc_type == 'pokemon'){
</span>    <span>emit(doc.name, null);
</span>  <span>}
</span><span>}
</span>
Copier après la connexion
Copier après la connexion

Ajouter divers auditeurs de cartes:

<span>{
</span>   <span>"points": "function(doc) {\n    if (doc.loc) {\n        emit([{\n            type: \"Point\",\n            coordinates: [doc.loc[0], doc.loc[1]]\n        }], [doc.name, doc.sprite]);\n    }};"
</span><span>}
</span>
Copier après la connexion
Copier après la connexion

Ajoutez un écouteur d'événements pour le moment où la zone de recherche change.

<span>curl -X GET --globoff 'http://192.168.33.10:5984/pokespawn/_design/location/_spatial/points?start_range=[-33.87049924568689,151.2149563379288]&end_range=[33.86709181198735,151.22298150730137]'
</span>
Copier après la connexion

La fonction FetchPokemon est responsable de la récupération du pokemon qui a été précédemment tracé dans la zone actuellement visible de la carte.

<span>git clone git@github.com:elecnix/docker-geocouch.git
</span><span>cd docker-geocouch
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Il s'agit du code pour ajouter la fonctionnalité automatique du champ de texte pour saisir le nom d'un pokemon. Une fonction RendeRitem est spécifiée pour personnaliser le HTML utilisé pour rendre chaque suggestion. Cela vous permet d'ajouter l'ID du Pokemon en tant qu'attribut de données que vous utilisez ensuite pour définir la valeur du champ Pokemon_ID une fois qu'une suggestion est sélectionnée.

# Get the CouchDB source
RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$
    tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Lorsque le bouton Enregistrer l'emplacement est enfoncé, une demande est faite au serveur pour ajouter l'emplacement Pokémon à Couchdb.

<span>docker build -t elecnix/docker-geocouch:1.6.1 .
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Styles

Créez un fichier public / css / styles.css et ajoutez les styles suivants:

<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1
</span><span>docker start <container id>
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

sécuriser Couchdb

Par défaut, CouchDB est ouvert à tous. Cela signifie qu'une fois que vous l'exposez à Internet, n'importe qui peut faire des ravages dans votre base de données. Tout le monde peut effectuer n'importe quelle opération de base de données en utilisant simplement Curl, Postman ou tout autre outil pour faire des demandes HTTP. En fait, cet état temporaire a même un nom: la «partie administrative». Vous avez vu cela en action dans le tutoriel précédent et même lorsque vous avez créé une nouvelle base de données, une vue et un document de conception plus tôt. Toutes ces actions ne peuvent être effectuées que par l'administrateur du serveur, mais vous l'avez fait et que vous l'avez fait sans connexion ou quoi que ce soit. Toujours pas convaincu? Essayez de l'exécuter sur votre machine locale:

<span>curl localhost:5984
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Vous obtiendrez ce qui suit en réponse si vous n'avez pas déjà d'administrateur de serveur sur votre installation CouchDB:

<span>curl 192.168.33.10:5984
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

yikes, non? La bonne nouvelle est qu'il y a une solution facile. Tout ce que vous avez à faire est de créer un administrateur de serveur. Vous pouvez le faire avec la commande suivante:

<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

La commande ci-dessus crée un nouvel administrateur de serveur nommé «Kami» avec le mot de passe «MySupersEcurePassword».

Par défaut, CouchDB n'a pas d'administrateur de serveur, donc une fois que vous en créez un, la partie d'administration est terminée. Notez que les administrateurs de serveurs ont des pouvoirs en forme de Dieu, vous feriez-vous probablement mieux de créer un ou deux. Créez ensuite une poignée d'administrateurs de base de données qui ne peuvent effectuer que des opérations CRUD. Vous pouvez le faire en exécutant la commande suivante:

php <span>composer create-project slim/slim-skeleton pokespawn
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

En cas de succès, il renverra une réponse similaire à ce qui suit:

<span>composer require danrovito/pokephp guzzlehttp/guzzle gregwar/image vlucas/phpdotenv
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Maintenant, vous pouvez essayer la même commande plus tôt avec un nom de base de données différent:

<span>function(doc){
</span>  <span>if(doc.doc_type == 'pokemon'){
</span>    <span>emit(doc.name, null);
</span>  <span>}
</span><span>}
</span>
Copier après la connexion
Copier après la connexion

et Couchdb vous criera:

<span>{
</span>   <span>"points": "function(doc) {\n    if (doc.loc) {\n        emit([{\n            type: \"Point\",\n            coordinates: [doc.loc[0], doc.loc[1]]\n        }], [doc.name, doc.sprite]);\n    }};"
</span><span>}
</span>
Copier après la connexion
Copier après la connexion

Pour que cela fonctionne, vous devez maintenant fournir votre nom d'utilisateur et votre mot de passe dans l'URL comme SO:

<span>git clone git@github.com:elecnix/docker-geocouch.git
</span><span>cd docker-geocouch
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

ok, alors c'est tout? Eh bien, pas vraiment parce que la seule chose que vous avez faite est de limiter les opérations de base de données qui ne peuvent être effectuées que par les administrateurs de serveurs. Cela comprend des choses comme la création d'une nouvelle base de données, la suppression d'une base de données, la gestion des utilisateurs, l'accès complet à toutes les bases de données (y compris les tables système), les opérations CRUD à tous les documents. Cela vous laisse avec des utilisateurs non authentifiés qui ont toujours le pouvoir de faire des trucs Crud sur n'importe quelle base de données. Vous pouvez essayer ceci en vous déconnectant de Futon, choisissez n'importe quelle base de données avec laquelle vous souhaitez jouer et y faire des trucs crud. Couchdb effectuera toujours avec plaisir ces opérations pour vous.

Alors, comment réparez-vous les trous restants? Vous pouvez le faire en créant un document de conception qui vérifiera si le nom d'utilisateur de l'utilisateur qui essaie d'effectuer une opération d'écriture (insérer ou mettre à jour) est le même que le nom de l'utilisateur autorisé à le faire. Dans Futon, connectez-vous à l'aide d'un compte d'administration ou d'administrateur de base de données, sélectionnez la base de données avec laquelle vous souhaitez travailler et créez un nouveau document de conception. Définissez l'ID en tant que _design / BlockanonymousWrites, ajoutez un champ nommé validate_doc_update et définissez la valeur sur les éléments suivants:

# Get the CouchDB source
RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$
    tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

La nouvelle version du document, le document existant et le contexte de l'utilisateur sont transmis comme un argument à cette fonction. La seule chose que vous devez vérifier est le UserCTX qui contient le nom de la base de données, le nom de l'utilisateur qui fait l'opération et un tableau de rôles attribués à l'utilisateur.

Un SECOBJ est également adopté comme le quatrième argument, mais vous n'avez pas vraiment besoin de travailler dessus; C’est pourquoi il est omis. Fondamentalement, le SECOBJ décrit quels privilèges d'administration ont été définis sur la base de données.

Une fois que vous avez ajouté la valeur, enregistrez le document de conception, déconnectez-vous et essayez de créer un nouveau document ou de mettre à jour un Couchdb se plaindre de Couchdb.

Comment créer un enregistreur Pokemon Spays Localiers avec Couchdb

Puisque vous ne vérifiez que le nom d'utilisateur, vous pourriez penser que les attaquants peuvent simplement deviner le nom d'utilisateur et fournir n'importe quelle valeur au mot de passe et que cela fonctionnerait. Eh bien, pas vraiment, car CouchDB vérifie d'abord si le nom d'utilisateur et le mot de passe sont corrects avant même que le document de conception ne soit exécuté.

Alternativement, si vous avez de nombreux utilisateurs dans une seule base de données, vous pouvez également vérifier le rôle. La fonction ci-dessous lancera une erreur à tout utilisateur qui n'a pas le rôle de "Pokemon_master".

<span>docker build -t elecnix/docker-geocouch:1.6.1 .
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Si vous souhaitez en savoir plus sur la façon de sécuriser CouchDB, assurez-vous de consulter les ressources suivantes:

  • Couchdb le guide définitif - Sécurité
  • Le guide définitif de l'authentification et de la sécurité CouchDB
  • Présentation des fonctionnalités de sécurité
  • Validation de mise à jour du document

sécuriser l'application

En terminons en mettant à jour l'application pour utiliser les mesures de sécurité que vous avez appliquées à la base de données. Mettez d'abord à jour le fichier .env: modifiez le base_uri avec seulement l'adresse IP et le port, puis ajoutez le nom d'utilisateur et le mot de passe de l'utilisateur Couchdb que vous avez créé.

<span>git clone git@github.com:elecnix/docker-geocouch.git
</span><span>cd docker-geocouch
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ensuite, mettez à jour le constructeur de la classe DB pour utiliser les nouveaux détails:

# Get the CouchDB source
RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$
    tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Conclusion

c'est tout! Dans ce tutoriel, vous avez appris à créer une application Pokemon Spawn Locations Recorder avec CouchDB. Avec l'aide du plugin GeoCCH, vous avez pu effectuer des requêtes spatiales et vous avez appris à sécuriser votre base de données CouchDB.

utilisez-vous CouchDB dans vos projets? Pourquoi? Des suggestions / fonctionnalités à ajouter dans ce petit projet de nous? Faites-nous savoir dans les commentaires!

Les questions fréquemment posées sur les emplacements Pokemon Spawn

Comment puis-je trouver des emplacements de pose de pokemon dans Pokemon Go?

Les emplacements de pose de Pokémon dans Pokemon Go se trouvent généralement dans des zones à forte activité cellulaire. Ces zones peuvent inclure des parcs, des centres commerciaux et d'autres lieux publics. L'application Pokemon Go utilise le GPS pour suivre votre emplacement et engendre Pokémon en fonction de votre environnement. Vous pouvez également utiliser des applications ou des sites Web tiers comme Pokemap.net pour trouver des emplacements de spawn. Cependant, sachez que l'utilisation de services tiers peut violer les conditions d'utilisation de Pokemon Go et peut entraîner une interdiction.

Qu'est-ce qu'un biome dans Pokemon Go et comment affecte-t-il les emplacements de ponte?

Un biome dans Pokemon Go est une zone géographique spécifique qui influence les types de pokémon qui y apparaissent. Par exemple, les Pokémon de type eau sont plus susceptibles de frayer près des plans d'eau, tandis que les Pokémon de type gazon sont plus susceptibles de frayer dans les parcs ou les forêts. Comprendre les différents biomes peut vous aider à prédire où certains types de Pokémon sont susceptibles de frayer.

Comment puis-je enregistrer des emplacements de pose de pokemon?

Vous pouvez enregistrer des emplacements de spawn Pokemon en utilisant une variété de méthodes. Une méthode consiste à utiliser une base de données comme CouchDB pour stocker les emplacements de Spawns Pokemon. Cela implique d'utiliser l'API Pokemon GO pour récupérer les données Spawn, puis de stocker ces données dans CouchDB. Vous pouvez ensuite utiliser ces données pour analyser les modèles de ponction et prédire les futurs emplacements de ponte.

Prédire les futurs en ressorts. En analysant les données, vous pouvez identifier les modèles dans les emplacements et les heures d'apparition. Cela peut vous aider à prédire où et quand certains types de Pokémon sont susceptibles d'apparier à l'avenir.

y a-t-il des risques associés à l'utilisation d'applications ou de sites Web tiers pour trouver des emplacements de spawn Pokemon?

Oui, il existe des risques associés à l'utilisation d'applications ou de sites Web tiers pour trouver des emplacements Pokemon Spawn. Ces services peuvent violer les conditions d'utilisation de Pokemon Go et peuvent entraîner une interdiction. De plus, ces services peuvent ne pas toujours fournir des informations précises ou à jour.

Comment puis-je utiliser le mod Pixelmon pour trouver des emplacements de spawn?

Le mod Pixelmon pour Minecraft vous permet de trouver Pokemon Spawn Lieux dans le jeu. Le mod comprend une fonctionnalité qui montre les emplacements d'apparition de Pokémon sur une carte. Vous pouvez utiliser cette fonctionnalité pour trouver et attraper Pokemon dans le jeu.

Qu'est-ce que la carte TenorShare Pokemon Go et comment fonctionne-t-elle? qui fournit une carte des emplacements de pose de pokemon. La carte est mise à jour en temps réel et comprend des informations sur les types de Pokémon qui se reproduisent et leurs emplacements exacts. Cependant, sachez que l'utilisation de ce service peut violer les conditions d'utilisation de Pokemon GO et peut entraîner une interdiction.

Comment puis-je utiliser le site Web Pogomap pour trouver des emplacements Pokemon Spawn?

Le Le site Web de Pogomap fournit une carte des emplacements Pokemon Spawn. La carte est mise à jour en temps réel et comprend des informations sur les types de Pokémon qui se reproduisent et leurs emplacements exacts. Vous pouvez utiliser ce site Web pour trouver et attraper Pokemon dans votre région.

Puis-je contribuer au site Web de Pogomap?

Oui, vous pouvez contribuer au site Web de Pogomap en signalant des emplacements Pokemon Spawn. Cela permet de maintenir la carte à jour et précise. Cependant, sachez que la signalement de fausses informations peut entraîner une interdiction du site Web.

Y a-t-il d'autres méthodes pour trouver des emplacements de spawn Pokemon?

Oui, il existe d'autres méthodes pour trouver des Pokémon Spawn Emplacements. Par exemple, vous pouvez rejoindre des communautés ou des forums locaux de Pokemon Go où les joueurs partagent des informations sur les emplacements de ponte. Vous pouvez également utiliser la fonction à proximité en jeu pour trouver des pokemon proches de votre emplacement actuel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal