Wo werden die Daten im Leaflet gespeichert?
P粉883973481
P粉883973481 2024-02-25 20:25:54
0
1
480

Ich habe eine Flyer-App mit einfachem Leaflet, HTML, CSS und JS eingerichtet. Derzeit befindet es sich nur in einem Ordner mit einer index.html-Datei, einer main.js-Datei und einem Ordner mit allen meinen Daten. Bei den Daten handelt es sich um Geojson-Daten. Letztendlich möchte ich, dass die Daten, mit denen ich arbeite, für Benutzer nicht zugänglich sind, wenn ich sie online stelle. Ich suche nach einem Gesamtbild und einem Überblick darüber, wie ich dieses Problem lösen soll.

Ich denke darüber nach, etwas wie MongoDB zum Speichern meiner Daten zu verwenden, aber es gibt online keine Präzedenzfälle oder Anleitungen dazu, wie man genau das mit Leaflet macht. Es scheint auch viele Änderungen an meinem Code und den Versuch zu erfordern, Express und Node(?) zu meiner App hinzuzufügen. Für Ideen oder Links zu Beispielen wären wir sehr dankbar.

P粉883973481
P粉883973481

Antworte allen(1)
P粉505917590

您对 MongoDB 的思考方向是错误的,因为这不会以任何额外的方式保护您的数据。

不可能提供纯 HTML 网页,而是隐藏数据 - 因为任何人都可以在 HTML 源代码中查找访问权限。

您需要的是支持 OAuth 的第三方提供商,例如:

他们会向您颁发 JWT,如下面的华为文档所示,然后在服务器端您需要验证令牌并决定是否提供数据。

即使这样,授权客户也可以获取并分发您的数据。

我知道这些东西,因为作为一名业余开发者,我编写了 2 个网页游戏,并且我正在使用这 4 个服务(还有更多)来验证用户。

这是我的服务器端 Java 代码示例,用于验证华为 Account Kit:

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;
        }
    }
}
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage