gpt4 book ai didi

firebase - 类型错误 : Cannot read property 'uid' of null

转载 作者:行者123 更新时间:2023-12-02 21:53:56 25 4
gpt4 key购买 nike

我正在尝试使用 Firebase 在我的应用程序中使用电话号码登录,但我在登录过程中遇到问题。我无法在 firebase 中使用电话号码登录,但如果我使用电话号码注册并重定向到主页,它就可以正常工作。我使用相同的方法登录,但遇到了类似 TypeError: Cannot read property 'uid' of null 的问题,但我成功获取了所有控制台值。我不知道这里出了什么问题。但该错误重复显示了 3 次,

这是我的代码:

    renderLoginButton() {
if (this.props.loading) {
return (
<Spinner size="large" />
);
}

return (
<Button
style={{ alignSelf: 'flex-start' }}
onPress={this.onLoginBtnClicked.bind(this)}
>
Login
</Button>
);
}

onLoginBtnClicked() {

    const { contact, password } = this.props;
const error = Validator('password', password) || Validator('contact', contact);

if (error !== null) {
Alert.alert(error);
} else {
console.log('else');
// this.props.loginUser({ contact, password});

const mobileNo = '+91'+contact;
firebase.auth().signInWithPhoneNumber(mobileNo)
.then(confirmResult =>
console.log(confirmResult),
curr = firebase.auth(),
console.log("curr"+JSON.stringify(curr)),
this.setState({ data: curr}),
NavigationService.navigate('Home')
)
.catch(error => console(error.message) );
}

}

CustomDrawerComponent.js

    import React, { Component } from 'react';
import { View, Image, Text } from 'react-native';
import { DrawerItems } from 'react-navigation';
import { connect } from 'react-redux';

import { fetchUserDetails } from '../actions';

class CustomDrawerContentComponent extends Component {

state = {
uri: '',
isfailed: ''
}

componentWillMount() {
this.props.fetchUserDetails();
}

componentWillReceiveProps(nextProps) {
let uri = '';
if (nextProps.ProfilePic !== '') {
uri = nextProps.ProfilePic;
this.setState({ uri, isfailed: false });
} else {
uri = '../images/ic_person_24px.png';
this.setState({ uri, isfailed: true });
}

this.setState({ uri });
}

renderProfileImage() {
if (!this.state.isfailed) {
return (
<Image
style={styles.profileImageStyle}
source={{ uri: (this.state.uri) }}
/>
);
}
return (
<Image
style={styles.profileImageStyle}
source={require('../images/ic_person_24px.png')}
/>
);
}

render() {
console.log('Profile Pic :: ', this.props.ProfilePic);
return (
<View style={styles.container}>
{this.renderProfileImage()}
<Text style={styles.textStyle}>
{this.props.name} - {this.props.category}
</Text>
<DrawerItems {...this.props} />
</View>
);
}
}

const styles = {
container: {
flex: 1,
paddingLeft: 10
},
textStyle: {
fontSize: 14,
textAlign: 'left',
color: '#000000'
},
profileImageStyle: {
alignSelf: 'flex-start',
marginTop: 16,
padding: 10,
width: 40,
height: 40,
borderRadius: 75
}
};

const mapStateToProps = state => {
const { userprofile } = state;
return userprofile;
};

export default connect(mapStateToProps, { fetchUserDetails })(CustomDrawerContentComponent);

调用栈:

enter image description here enter image description here

最佳答案

为什么user返回为undefined(甚至null)?

你知道有一个已登录的用户,你刚刚登录,哎呀,你甚至可以在 Chrome 开发工具中看到该用户对象。

那为什么还是返回undefined呢?有一个直接的答案。

您正在用户对象可供使用之前获取该对象。

现在,发生这种情况的原因有多种,但如果您遵循这两条“规则”,您将不会再看到该错误。

规则 #1:将其移出 constructor()

当你遇到类似的情况时:

constructor(){
this.userId = firebase.auth().currentUser.uid
}

超过一半的页面加载时间,构造函数将尝试在用户准备好之前获取用户,应用程序会阻止它,因为页面未完全加载,因此您将尝试访问尚不存在的属性的 uid。

当页面完全加载后,您现在可以调用以获取currentUser.uid

规则 #2:使其成为可观察对象

您还可以采用另一种方法,即我们刚刚进行的先前 Firebase 调用:firebase.auth().currentUser 是同步的。我们可以通过订阅 auth observable 来使其异步。

/**
* When the App component mounts, we listen for any authentication
* state changes in Firebase.
* Once subscribed, the 'user' parameter will either be null
* (logged out) or an Object (logged in)
*/
componentDidMount() {
this.authSubscription = firebase.auth().onAuthStateChanged((user) => {
this.setState({
loading: false,
user,
});
});
}
/**
* Don't forget to stop listening for authentication state changes
* when the component unmounts.
*/
componentWillUnmount() {
this.authSubscription();
}
render() {
// The application is initialising
if (this.state.loading) return null;
// The user is an Object, so they're logged in
if (this.state.user) return <LoggedIn />;
// The user is null, so they're logged out
return <LoggedOut />;
}
}

来源文章:Why does Firebase return undefined when fetching the uid?

React Native 的一个很好的教程将在这里:Getting started with Firebase Authentication on React Native由于您的代码没有显示太多内容,我希望您更新您的问题以显示更多代码,以便我可以查看。

关于firebase - 类型错误 : Cannot read property 'uid' of null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52254513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com