Firebase Authentication - пользовательский объект становится нулевым только после первой успешной регистрации - PullRequest
0 голосов
/ 01 апреля 2019

Проблема

У меня проблемы с аутентификацией в firebase - после того, как пользователь впервые зарегистрировался, они проходят аутентификацию и для них создается экземпляр в базе данных.

Приложение загружает «Панель инструментов» (которая защищена аутентификацией HOC) и пользовательскую информацию в совершенстве.Тем не менее, как только я пытаюсь перемещаться по приложению с помощью «act-router », HOC вылетает из меня, поскольку в AuthState произошли очевидные изменения, и пользовательский объект теперь имеет значение null.

ЭТО ТОЛЬКО ПРОИСХОДИТВПЕРВЫЕ ПОЛЬЗОВАТЕЛЬ ПОДПИСЫВАЕТСЯ.В противном случае аутентификация стабильна во всех остальных случаях.

Я пытался: - Явный вход пользователя в систему после регистрации, но тот же результат происходит

Этоследующий вопрос похож на

Аутентификация Firebase - пользователь не вошел в систему после регистрации и перенаправления Firebase

HOC

export default function (ComposedComponent) {
    class Authentication extends Component {
        constructor() {
            super();

            this.unsubscribe = null;
        }
        componentDidMount() {
            this.unsubscribe = firebase.auth().onAuthStateChanged(function(user){
                if(!user) {
                    history.push("/signin")
                }
            })
        }
        componentWillUnmount() {
            this.unsubscribe();
        }

        render() {
        return ( <ComposedComponent {...this.props} /> )
        }
    }
    return Authentication;
}

Базовая регистрацияДействие

export function SignUpUser(values) {
    // Wrap inner log with function to give access to dispatch - redux thunk
    return function(dispatch) {
        // Create session
        firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION)
        // Successful Session Creation
        .then(function(){
            // Sign Up User
            return firebase.auth().createUserWithEmailAndPassword(values.email, values.password)
            // Successful SignUp Logic
            .then(function(response){
                // 1) Save uid to redux state for reads and writes
                values.uid = response.user.uid
                dispatch({ type: USER_UID, payload: values.uid })
                dispatch({ type: USER_DETAILS, payload: response.user })
            })
            // Unsuccessful Sign Up
            .catch(function(error){
                dispatch({ type: DISPLAY_ERROR, payload: error }) 
            })

        })
        // Unsuccessful Session Creation
        .catch(function(error){
            dispatch({ type: DISPLAY_ERROR, payload: error }) 
        })
    }
}

Кто-нибудь понимает, почему я не вошел в систему?

Находится ли объект аутентификации в каком-то промежуточном состоянии?

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Не могли бы вы попробовать эти строки, я думаю, вы должны исправить коды и использовать функции стрелок ...

export function SignUpUser(values) {
// Wrap inner log with function to give access to dispatch - redux thunk
return function(dispatch) {
    // Create session
    firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION)
    // Successful Session Creation
    .then(() =>{
        // Sign Up User
        return firebase.auth().createUserWithEmailAndPassword(values.email, values.password)
        // Successful SignUp Logic
        .then((response)=>{
            // 1) Save uid to redux state for reads and writes
            values.uid = response.user.uid
            dispatch({ type: USER_UID, payload: values.uid })
            dispatch({ type: USER_DETAILS, payload: response.user })
        })
        // Unsuccessful Sign Up
        .catch((error)=>{
            dispatch({ type: DISPLAY_ERROR, payload: error }) 
        })

    })
    // Unsuccessful Session Creation
    .catch(function(error){
        dispatch({ type: DISPLAY_ERROR, payload: error }) 
    })
}

}

0 голосов
/ 01 апреля 2019

Попробуйте изменить маршрут к панели инструментов или домашней странице следующим образом: this.props.history.push ( '/ dahboard');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...