Di mana data disimpan dalam Risalah
P粉883973481
P粉883973481 2024-02-25 20:25:54
0
1
479

Saya mempunyai apl risalah yang sedang dijalankan menggunakan Risalah biasa, HTML, CSS dan JS. Pada masa ini, ia hanya dalam folder dengan fail index.html, fail main.js dan folder dengan semua data saya. Data tersebut ialah data geojson. Saya akhirnya mahu data yang saya bekerjasama tidak boleh diakses oleh pengguna apabila saya meletakkannya dalam talian. Saya sedang mencari gambaran besar, garis besar bagaimana saya harus menyelesaikan masalah ini.

Saya sedang mempertimbangkan untuk menggunakan sesuatu seperti MongoDB untuk menyimpan data saya, tetapi tidak ada preseden atau tutorial dalam talian tentang cara melakukan perkara ini dengan Risalah. Ia juga nampaknya memerlukan banyak perubahan pada kod saya dan cuba menambah ekspres dan nod(?) pada aplikasi saya. Sebarang idea atau pautan kepada contoh akan sangat dihargai.

P粉883973481
P粉883973481

membalas semua(1)
P粉505917590

Anda berfikir ke arah yang salah dengan MongoDB kerana ini tidak melindungi data anda dalam sebarang cara tambahan.

Tidak mungkin untuk menyediakan halaman web HTML biasa, tetapi untuk menyembunyikan data - kerana sesiapa sahaja boleh mencari akses dalam kod sumber HTML.

Apa yang anda perlukan ialah penyedia pihak ketiga yang menyokong OAuth, seperti:

Mereka akan mengeluarkan JWT kepada anda seperti yang ditunjukkan dalam dokumentasi Huawei di bawah, kemudian pada bahagian pelayan anda perlu mengesahkan token dan memutuskan sama ada untuk memberikan data tersebut.

Walaupun begitu, pelanggan yang diberi kuasa boleh mendapatkan dan mengedarkan data anda.

Saya tahu perkara ini kerana sebagai pembangun hobi saya menulis 2 permainan web dan saya menggunakan 4 perkhidmatan ini (ada lagi) untuk mengesahkan pengguna.

Ini adalah contoh kod Java sebelah pelayan saya untuk mengesahkan Kit Akaun 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;
        }
    }
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan