Maison  >  Questions et réponses  >  le corps du texte

Où sont stockées les données dans Leaflet

J'ai une application de brochure opérationnelle utilisant Plain Leaflet, HTML, CSS et JS. Actuellement, c'est juste dans un dossier avec un fichier index.html, un fichier main.js et un dossier avec toutes mes données. Les données sont des données Geojson. Je souhaite en fin de compte que les données avec lesquelles je travaille soient inaccessibles aux utilisateurs lorsque je les mets en ligne. Je recherche une vue d'ensemble, un aperçu de la façon dont je devrais résoudre ce problème.

J'envisage d'utiliser quelque chose comme MongoDB pour stocker mes données, mais il n'existe aucun précédent ni tutoriel en ligne sur la façon de faire exactement cela avec Leaflet. Cela semble également nécessiter de nombreuses modifications de mon code et essayer d'ajouter express et node(?) à mon application. Toutes les idées ou liens vers des exemples seraient grandement appréciés.

P粉883973481P粉883973481236 Il y a quelques jours418

répondre à tous(1)je répondrai

  • P粉505917590

    P粉5059175902024-02-26 00:38:30

    Vous pensez dans la mauvaise direction avec MongoDB car cela ne protège pas vos données de manière supplémentaire.

    Il n'est pas possible de servir une simple page Web HTML, mais de masquer les données - car n'importe qui peut y accéder dans le code source HTML.

    Ce dont vous avez besoin, c'est d'un fournisseur tiers prenant en charge OAuth, tel que :

    Ils vous délivreront un JWT comme indiqué dans la documentation Huawei ci-dessous, puis côté serveur, vous devrez valider le jeton et décider de fournir ou non les données.

    Même dans ce cas, les clients autorisés peuvent obtenir et distribuer vos données.

    Je connais ce genre de choses car en tant que développeur amateur, j'ai écrit 2 jeux Web et j'utilise ces 4 services (il y en a plus) pour authentifier les utilisateurs.

    Voici mon exemple de code Java côté serveur pour vérifier le kit de compte Huawei :

    private void handleHuaweiAuth(HttpServletRequest httpReq, HttpServletResponse httpResp) throws ServletException, IOException {
        String error            = httpReq.getParameter("error");
        String errorDescription = httpReq.getParameter("error_description");
        String code             = httpReq.getParameter("code");
        String state            = httpReq.getParameter("state");
    
        // use hash of salt and current month name as CSRF protection
        String month = md5("PUT SOME SECRET HERE" + Calendar.getInstance().getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH));
    
        if (error != null) {
            throw new ServletException(error + ": " + errorDescription);
            
        } else if (code != null && month.equals(state)) {
            MultiMap postParams = new MultiMap<>();
            postParams.put("code",          code);
            postParams.put("client_id",     HUAWEI_ID);
            postParams.put("client_secret", HUAWEI_SECRET);
            postParams.put("redirect_uri",  String.format(HUAWEI_REDIRECT_URI, mLanguage));
            postParams.put("grant_type",    "authorization_code");
            
            try {
                String tokenStr = mHttpClient.POST(HUAWEI_TOKEN_URL)
                    .headers(httpFields ->
                    {
                        httpFields.add(new HttpField(HttpHeader.ACCEPT, APPLICATION_JSON));
                        httpFields.add(new HttpField(HttpHeader.CONTENT_TYPE, APPLICATION_URLENCODED));
                    })
                    .body(new StringRequestContent(UrlEncoded.encode(postParams, StandardCharsets.UTF_8, false)))
                    .send().getContentAsString();
                LOG.info("handleHuaweiAuth tokenStr = {}", tokenStr);
                Map tokenMap = (Map) new JSON().fromJSON(tokenStr);
                //String accessToken = tokenMap.get("access_token");
                //String refreshToken = tokenMap.get("refresh_token");
    
                // NOTE: the code is only valid for 1 usage.
                // If the user reloads this page, then the following will be returned:
                // {"sub_error":20156,"error_description":"code used twice","error":1101}
                // parsing token will result in NPE caught below and redirect to front page
    
                String idToken = tokenMap.get("id_token");
                Map idMap = parseJwt(idToken);
                String sid    = idMap.get("sub"); 
                String photo  = idMap.get("picture");
                String given  = idMap.get("given_name");
                String family = idMap.get("family_name");
    
                printGameApp(httpReq, httpResp, HUAWEI, sid, given, family, photo);
                return;
            } catch (InterruptedException | TimeoutException | ExecutionException | NullPointerException ex) {
                LOG.warn("handleHuaweiAuth", ex);
                // redirect to the front page
                httpResp.sendRedirect("/");
                return;
            }
        }
    }

    répondre
    0
  • Annulerrépondre