Первый аргумент verifyIdToken () должен быть ошибкой строки токена Firebase ID. - PullRequest
1 голос
/ 27 мая 2020

Я отправил idtoken с android на сервер node.js Я хочу проверить Idtoken в node.js

Но произошла эта ошибка.

Первый аргумент verifyIdToken () должен быть строка токена Firebase ID.

Я не знаю, почему произошла ошибка

Я отправил токен на свой локальный сервер и сервер веб-хостинга. Но оба произошли ошибки.

 var admin = require("firebase-admin");
   function authCheck(token) {

   return admin.auth().verifyIdToken(token)
};

 exports.authCheck = authCheck;
  // exports.userCheck=userCheck;

Это мое промежуточное ПО для проверки idtoken

 const { authCheck } = require('../user_fish/firebase');
  const user_infoRepository = require('../user_info/repository')

 function firebaseAuth(req, res, next) {
let token = req.body.token;

authCheck(token)
    .then(decodedToken => {
        let uid=decodedToken.uid;
        console.log(uid);
   //     return user_infoRepository.uidFindOrCreate(decodedToken.uid)
    })
    .then(user => {

        req.user = user[0]
        next();
    })
    .catch(e => {
        res.json(e)
    })

  }

 exports.firebaseAuth = firebaseAuth; 

И это мой код android для отправки токена на node.js

      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user=firebaseAuth.getCurrentUser();
            String uid=user.getUid();
            Log.d(TAG,"user uid:"+user.getUid());
            if(user!=null){
                //Token 알아내기
                user.getIdToken(true)
                        .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
                            @Override
                            public void onComplete(@NonNull Task<GetTokenResult> task) {
                                if(task.isSuccessful()){
                                    String idToken=task.getResult().getToken();
                           try {
                               // Send token to your backend via HTTPS
                               Log.d(TAG,"Token: " +idToken);
                               Log.d(TAG,"start:"+"start ok http");

                               OkHttpClient client = new OkHttpClient();
                               RequestBody formBody = new FormBody.Builder()
                                       .add("idToken", idToken)
                                       .build();
                               Request request = new Request.Builder()
                                       .url("http://10.0.2.2:3000/user_fish/fish")
                                       .post(formBody)
                                       .build();

                               //바동기 처리
                               client.newCall(request).enqueue(new Callback() {
                                   @Override
                                   public void onFailure(@NotNull Call call, @NotNull IOException e) 
 {
                                        Log.d(TAG,"fail:"+e.toString());
                                       System.out.println("error + Connection Server Error 
          is"+e.toString());
                                   }

                                   @Override
                                   public void onResponse(@NotNull Call call, @NotNull Response 
              response) throws IOException {
                                       Log.d(TAG,"success:"+response.body().toString());
                System.out.println("Response Body is "+ response.body().string());
                                   }
                               });
                           }catch (Exception e){

                           }

                                 Toast.makeText(MainActivity.this, idToken, 
          Toast.LENGTH_SHORT).show();
                                }else{

                                }
                            }
                        });

                Intent intent=new Intent(MainActivity.this, BasicActivity.class);

               // intent.putExtra("uid",uid);
                Log.d(TAG,"basic가는 uid:"+uid);
              //  Toast.makeText(MainActivity.this,uid, Toast.LENGTH_SHORT).show();
                startActivity(intent);

            }else{

            }
        }
    };

Это информация о моем токене

  {
 "iss": "https://securetoken.google.com/graduation-f5a8d",
 "aud": "graduation-f5a8d",
 "auth_time": 1590587163,
 "user_id": "f4ZelA5RrPQDvc9oqp5ev1WSXwW2",
  "sub": "f4ZelA5RrPQDvc9oqp5ev1WSXwW2",
 "iat": 1590587164,
 "exp": 1590590764,
"email": "hyogil2478@daum.net",
 "email_verified": false,
  "firebase": {
   "identities": {
    "email": [
      "hyogil2478@daum.net"
    ]
   },
   "sign_in_provider": "password"
 }
}

Подскажите, пожалуйста, как решить эту проблему ...

1 Ответ

0 голосов
/ 27 мая 2020

Было бы лучше проверить значение req.body.token.
Кажется, ваш код android отправляет токен как idToken.

 function firebaseAuth(req, res, next) {
    let token = req.body.token;
    console.log(token);
    //or
    console.log(req.body);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...