繁体   English   中英

React Native 中的 AccessToken 和 ExpiryDate 来自 Firebase SDK

[英]AccessToken and ExpiryDate from Firebase SDK in React Native

在我使用 Firebase 中的 Rest API 之前,我尝试使用 Firebase Auth 对我的应用程序进行身份验证,它适用于我和我的 Reducer,因为 Reducer 需要 uid、accessToken 和 expirationTime,我能够获得此代码在登录上工作(至少要获得关于登录的响应,我需要在我的 Reducer 中获取数据)。

export const login = (email, password) => async dispatch => {
    try {
        firebase
            .auth()
            .signInWithEmailAndPassword(email, password)
            .then(resData => {
                console.log(resData);
            })
            .catch(err => {
                console.log(err);
            });
    } catch (err) {
        console.log(err);
    }

现在,当我记录整个 resData 时,我得到这个 JSON Object:

Object {
  "additionalUserInfo": ig {
    "isNewUser": false,
    "providerId": "password",
  },
  "credential": null,
  "operationType": "signIn",
  "user": Object {
    "apiKey": "[My API Key]",
    "appName": "[DEFAULT]",
    "authDomain": "alianzafc2021.firebaseapp.com",
    "createdAt": "1611239757130",
    "displayName": null,
    "email": "admin@chronotechsv.info",
    "emailVerified": false,
    "isAnonymous": false,
    "lastLoginAt": "1611933308747",
    "phoneNumber": null,
    "photoURL": null,
    "providerData": Array [
      Object {
        "displayName": null,
        "email": "admin@chronotechsv.info",
        "phoneNumber": null,
        "photoURL": null,
        "providerId": "password",
        "uid": "admin@chronotechsv.info",
      },
    ],
    "redirectEventId": null,
    "stsTokenManager": Object {
      "accessToken": "[***THE ACCESS TOKEN I NEED***]",
      "apiKey": "[My API Key]",
      "expirationTime": 1611937026869,
      "refreshToken": "[A Refres Token]",
    },
    "tenantId": null,
    "uid": "5Vzshkdlu8W3sDSZMt9bc9Sn9k92",
  },
}

无论如何,我认为它只是通过执行控制台日志来访问特定的 object,例如:

console.log(resData.user.stsTokenManager.accessToken);

我试过了,结果是未定义的,你可以在这里看到:

不明确的

现在我尝试让 AutoComplete function 向我显示 resData 对象的内容,我得到了这个:

资源数据内容

我假设在用户内部我会有stsTokenManager但没有显示这样的东西:

第1部分

第2部分

最后,这是我的 Reducer,供大家查看为什么我需要 UID 和带有到期日的令牌:

import { AUTHENTICATE, LOGOUT, SET_DID_TRY_AL } from "../actions/auth";

const initialState = {
    token: null,
    userId: null,
    didTryAutoLogin: false,
};

export default(state = initialState, action) => {
    switch (action.type) {
        case AUTHENTICATE:
            return{
                token: action.token,
                userId: action.userId,
                didTryAutoLogin: true,
            };
        case SET_DID_TRY_AL:
            return {
                ...state,
                didTryAutoLogin: true,
            }
        case LOGOUT:
            return {
                ...initialState,
                didTryAutoLogin: true,
            };
       // case SIGNUP:
        //    return{
         //       token: action.token,
         //       userId: action.userId,
         //   };
        default:
            return state;
    }
};

PS:我在网上阅读了有关 getToken( )的方法,在本例中应将其应用于signInWithEmailAndPassword(email, password)的结果 resData,但是当我这样做时,我收到错误消息:

resData.getToken 不是 function。(在“resData.getToken()”中,“resData.getToken”未定义)

有任何想法吗?

stsTokenManager 是一个承诺,您需要这样做才能完美地工作:

const res = await Api.loginEmailSenha(emailField, passwordField);
const token = await res.user.getIdToken();
console.log(token);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM