我已经尝试了我能想到的每一种方法,但每天都遇到同样的问题。
我正在构建一个react原生移动应用程序。我使用firebase作为我的数据库,并使用react-native-facebook-login包让用户登录。
目前包工作正常,我输入fb详细信息,返回正确的数据,用户‘登录’,我可以控制台日志的结果,但尝试做任何其他返回一个错误。
我试过了:
传递一个我执行firebase登录的操作(Redux),错误:
Cannot read property 'loginUser' of undefined
结果数据的setState,错误:
this.setState is not a function
我不确定如何使用凭据进行firebase身份验证,但我很高兴稍后能弄清楚这一点,我只需要首先能够访问数据!
我的组件:
...
class FBLoginWrapper extends Component {
state = { user: null };
render() {
return (
<FBLogin
buttonView={<FBSignInView />}
ref={(fbLogin) => { this.fbLogin = fbLogin }}
loginBehavior={FBLoginManager.LoginBehaviors.Native}
permissions={["email","user_friends"]}
onLogin={function (e) { this.props.loginUser(e); }}
onLoginFound={function (e) { this.setState({ user: e }); }}
/>
);
}
...
如果您需要更多代码,请让我知道。我列出了我在onLogin和onLoginFound下尝试过的两种不同的方法,但都失败了。当我有了可以工作的东西时,我将为两者使用一个实现。
理想情况下,我希望将操作命名为{this.props.loginUser(e)},但是如果我必须通过setState来调用,那么在这一点上也没问题。
发布于 2017-01-14 20:29:47
如果只需要访问返回的数据,则应该使用onLoginFinished属性。
这是我在我的一个应用程序中使用LoginButton的方式: AccessToken是FBSDK包的一部分
const FBSDK = require('react-native-fbsdk');
const {
LoginButton,
AccessToken
} = FBSDK;
....
<View>
<LoginButton
publishPermissions={["publish_actions"]}
onLoginFinished={
(error, result) => {
if (error) {
alert("login has error: " + result.error);
} else if (result.isCancelled) {
alert("login is cancelled.");
} else {
AccessToken.getCurrentAccessToken().then(
(data) => {
let token = data.accessToken.toString();
global.storage.save({
key: 'loginState',
rawData: {
token: token
},
});
firestack.auth.signInWithProvider('facebook', token, '')
.then((user)=>{
Actions.tabbar({profile:user});
});
}
)
}
}
}
onLogoutFinished={() => alert("logout.")}/>
https://stackoverflow.com/questions/41649914
复制相似问题