我正在尝试使用redux存储更改Firebase用户名。
我有一个注册表单,用于接收输入的电子邮件,密码和用户名,然后该表单使用电子邮件和密码创建一个Firebase帐户,然后使用firebase的 updateProfile 更新displayName。看到这个
那是我的redux减速器:
case "CHANGE_USERNAME":
const currentUser = firebase.auth().currentUser;
currentUser.updateProfile({ displayName: state.user.displayName });
return { ...state.user, displayName: action.payload };
这是商店:
const initialState = {
logged: null,
user: {}
};
这是我的注册表的一部分:
firebase
.auth()
.createUserWithEmailAndPassword(this.state.email, this.state.password)
.then(() => {
this.props.dispatch({
type: "CHANGE_USERNAME",
payload: { ...this.state.username }
});
alert("Account created!");
})
.catch(error => {
// Handling errors
var errorCode = error.code;
var errorMessage = error.message;
alert(errorCode);
});
为什么用户名没有更改?
答案 0 :(得分:0)
您没有从承诺中得到任何回报。假设createUserWithEmailAndPassword
返回了一个Promise,并且响应中包含一个username
字段,那么您想将response.username
分发到化简器。
.then((response) => {
this.props.dispatch({
type: "CHANGE_USERNAME",
payload: { response.username }
});
alert("Account created!");
})
在减速器中,您要添加新的username
状态。像这样:
return { ...this.state, username: payload }
答案 1 :(得分:0)
谢谢,我已经使用以下方法解决了该问题:
case "CHANGE_USERNAME": {
const currentUser = firebase.auth().currentUser;
currentUser.updateProfile({ displayName: action.payload });
return {
...state,
user: { ...currentUser.providerData[0] }
};
}
在我的减速器上:
this.props.dispatch({
type: "CHANGE_USERNAME",
payload: this.state.displayName
});
在我的调度中,谢谢!