Java应用程序的Firebase用户身份验证(非Android) [英] Firebase user authentication for java application (Not Android)

查看:49
本文介绍了Java应用程序的Firebase用户身份验证(非Android)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用Firebase为我的 java 应用程序创建用户身份验证表单.提供了与实时数据库连接的依赖关系,并且 Admin 的使用="noreferrer">此处.

I want to create a user authentication form for my java application using firebase. The dependencies for connection to the realtime database is available and the use of Firebase Admin is well documented here.

但是目前Firebase 管理员仅支持Node.js的用户身份验证,并且记录在

But presently Firebase Admin supports user authentication only for Node.js and it is documented here.

这是我的测试代码.

public class Login {
    private JPanel jPanel;

    public static void main(String[] args) {
//        Show My Form
        JFrame jFrame = new JFrame("Login");
        jFrame.setContentPane(new Login().jPanel);
        jFrame.pack();
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jFrame.setVisible(true);

//        Firebase
        FirebaseOptions options = null;
        try {
            options = new FirebaseOptions.Builder()
                    .setServiceAccount(new FileInputStream("xxx.json"))
                    .setDatabaseUrl("https://xxx.firebaseio.com/")
                    .build();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        if (options != null) {
            FirebaseApp.initializeApp(options);
            DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Clip");
            ref.addValueEventListener(new ValueEventListener() {
                public void onDataChange(DataSnapshot dataSnapshot) {
                    System.out.println("ClipText = [" + dataSnapshot.getValue() + "]");
                }

                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
    }
}

任何人都可以指导我如何为我的 java 应用创建用户身份验证(例如,使用电子邮件和密码创建用户,登录)吗?

Can anyone please guide me how can I create user authentication (e.g. Create user using email & password, Sign in) for my java application?

注意:我正在使用Gradle.

Note: I'm using Gradle.

推荐答案

此处基于REST API文档: https://firebase.google.com/docs/reference/rest/auth/ 我创建了一个类似的单例,以便从电子邮件和密码中获取有效令牌并使用getAccountInfo方法对其进行验证:

Basing on the REST API documentation here: https://firebase.google.com/docs/reference/rest/auth/ i created a singleton like that to get a valid token from email and password and to validate it using the getAccountInfo method:

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class FireBaseAuth {

    private static final String BASE_URL = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/";
    private static final String OPERATION_AUTH = "verifyPassword";
    private static final String OPERATION_REFRESH_TOKEN = "token";
    private static final String OPERATION_ACCOUNT_INFO = "getAccountInfo";

    private String firebaseKey;

    private static FireBaseAuth instance = null;

    protected FireBaseAuth() {
       firebaseKey = "YOUR FIREBASE KEY HERE";
    }

    public static FireBaseAuth getInstance() {
      if(instance == null) {
         instance = new FireBaseAuth();
      }
      return instance;
    }

    public String auth(String username, String password) throws Exception { 

        HttpURLConnection urlRequest = null;
        String token = null;

        try {
            URL url = new URL(BASE_URL+OPERATION_AUTH+"?key="+firebaseKey);
            urlRequest = (HttpURLConnection) url.openConnection();
            urlRequest.setDoOutput(true);
            urlRequest.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
            OutputStream os = urlRequest.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
            osw.write("{\"email\":\""+username+"\",\"password\":\""+password+"\",\"returnSecureToken\":true}");
            osw.flush();
            osw.close();

            urlRequest.connect();

            JsonParser jp = new JsonParser(); //from gson
            JsonElement root = jp.parse(new InputStreamReader((InputStream) urlRequest.getContent())); //Convert the input stream to a json element
            JsonObject rootobj = root.getAsJsonObject(); //May be an array, may be an object. 

            token = rootobj.get("idToken").getAsString();

        } catch (Exception e) {
            return null;
        } finally {
            urlRequest.disconnect();
        }

        return token;
    }

    public String getAccountInfo(String token) throws Exception {

        HttpURLConnection urlRequest = null;
        String email = null;

        try {
            URL url = new URL(BASE_URL+OPERATION_ACCOUNT_INFO+"?key="+firebaseKey);
            urlRequest = (HttpURLConnection) url.openConnection();
            urlRequest.setDoOutput(true);
            urlRequest.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
            OutputStream os = urlRequest.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
            osw.write("{\"idToken\":\""+token+"\"}");
            osw.flush();
            osw.close();
            urlRequest.connect();

            JsonParser jp = new JsonParser(); //from gson
            JsonElement root = jp.parse(new InputStreamReader((InputStream) urlRequest.getContent())); //Convert the input stream to a json element
            JsonObject rootobj = root.getAsJsonObject(); //May be an array, may be an object. 

            email = rootobj.get("users").getAsJsonArray().get(0).getAsJsonObject().get("email").getAsString();

        } catch (Exception e) {
            return null;
        } finally {
            urlRequest.disconnect();
        }

        return email;

    }

}

这不允许您动态创建用户,但假设已经在Firebase上创建了用户

This not allow you to create users dinamically but suppose to have them already created on Firebase

这篇关于Java应用程序的Firebase用户身份验证(非Android)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆