【问题标题】:Call Firebase function from Java via POST通过 POST 从 Java 调用 Firebase 函数
【发布时间】:2020-07-27 10:07:28
【问题描述】:

所以我有这个 TypeScript 函数,它可以将文档写入 firestore

    exports.register = functions.https.onRequest((req:any, res:any) => {
    if (req.method === 'PUT') {
        res.status(403).send('Forbidden!');
        return;
    }   
    cors(req, res, () => {
        const name = req.query.name;
        //validations
        if (!name) {
            res.status(200).send("Please enter name.");
            return;
        }
        //Other input validations....
    
        const vkey = Math.random()*1000000000000000;
        
        //check if user already exists in firestore
        const userRef = admin.firestore().collection('users')

        let userExists;
        userRef.where('email', '==', email).get()
        .then((snapshot: { size: any; }) => {
            userExists = snapshot.size;
            console.log(`user by email query size ${userExists}`);
            //send error if user exists
            if(userExists && userExists > 0){
                res.status(200).send("Account with the same email exists");
                return;
            }
            //add user to database
            admin.firestore().collection('users').add({
                name: name,
                email: email,
                password: password,
                user: user,
                vkey: vkey,
                verified: 0,
                token: 0
            }).then((ref: { id: any; }) => {
                console.log('add user account', ref.id);
                res.status(200).send("Registered");
                return; 
            });             

        })
        .catch((err: any) => {
            console.log('error getting user by email', err);
            res.status(200).send("System error, please try again.");
        });


    });
});

我需要通过 POST 请求从我的 java 代码中调用此函数。我已经通过 GET 这样做了,但是我必须发送的数据大于 GET 可以处理的数据。(我知道 register 函数工作正常,因为我收到了响应,并且在使用 GET 进行测试时,发送的数据较少,会将文档写入firestore 没问题)我目前实现 POST 的代码是这样的:

public class UtilsUpdateUser extends AsyncTask<String,Void,String> {
        @Override
        protected String doInBackground(String... urls) {
            try {

                String jsonString = Utils.userToString(Utils.USER);

                String data = URLEncoder.encode("name", "UTF-8") + "=" +
                        URLEncoder.encode(usernameString, "UTF-8");
                data += "&" + URLEncoder.encode("password", "UTF-8") + "=" +
                        URLEncoder.encode(Utils.PASSWORD, "UTF-8");
                data += "&" + URLEncoder.encode("user", "UTF-8") + "=" +
                        URLEncoder.encode(jsonString, "UTF-8");
                data += "&" + URLEncoder.encode("email", "UTF-8") + "=" +
                        URLEncoder.encode(emailString, "UTF-8");

                URL url = new URL(urls[0]);
                URLConnection conn = url.openConnection();
                conn.setDoOutput(true);
                OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
                wr.write(data);
                wr.flush();
                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                StringBuilder sb = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                }
                return sb.toString();
            } catch (Exception e) {
                return "Internet";
            }
        }
        @Override
        protected void onPostExecute(String s) {
            Log.i("MyData",s);
        }
    }

但此代码始终会导致“请输入姓名”。非常感谢任何帮助。

【问题讨论】:

    标签: java typescript firebase google-cloud-functions


    【解决方案1】:

    POST 调用是正确的,问题是在我使用的云功能中 req.query.VARIABLE_NAME; 这对于 GET 来说很好,以防 POST 它;s req.body.VARIABLE_NAME;

    【讨论】:

      猜你喜欢
      • 2017-08-09
      • 2022-01-25
      • 2012-05-10
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多