ユーザがMeteorアプリケーションにログインしてDDP接続を失って回復した場合、クライアントがログインする前にサーバーは実行します。Meteor minimongoは、サーバの前にクライアントにログインしたユーザを示します
例えば、IはMeteor.loggingIn()
の結果に応じて更新するコンテナコンポーネントを有する:MainNavigation
成分で
const MainNavigationContainer = createContainer(props => {
return {
meteorReady: Meteor.loggingIn() === false
}
}, MainNavigation);
を、私は(ユーザの_id
に基づいて結果を返す必要が流星方法を実行I )無関係なコードを削除することを試みた:Meteor.user()
が定義されている場合
class MainNavigation extends Component {
componentWillReceiveProps(nextProps) {
this.setInitialRoute(nextProps);
}
setInitialRoute = (props) => {
// Set up initial route
if (props.meteorReady) {
if (!Meteor.user()) {
this.setState({initialRoute: routes[1]});
} else {
Meteor.call('/user/events/isActive', (e, eventId) => {
if (eventId) {
// Do some stuff
} else {
// Do some other stuff
}
});
}
}
};
render() {
return (
this.props.meteorReady && this.state.initialRoute ?
<Navigator
ref={navigator => this.navigator = navigator}
initialRoute={this.state.initialRoute}
renderScene={(route, navigator) => { ... }}
/> : (
<View style={styles.container}>
<ActivityIndicator animating={true}/>
</View>
)
)
}
}
/user/events/isActive
メソッド呼び出しは、実行されるべきである(ユーザーがログインしている平均べきです)。しかし、私は、サーバーの呼び出しを見て:(DDP切断と再接続後に)この方法の
Meteor.methods({
'/user/events/isActive': function() {
console.log('userId:', this.userId);
if (this.userId) {
const member = Members.findOne({userId: this.userId});
if (member) {
return member.eventId;
}
return false;
}
return false;
}
});
最初の呼び出しはthis.userId
がnull
に等しいで終わります。
基本的に、Meteor.user()
がクライアントに定義されている場合、サーバー上にはthis.userId
が定義されています。しかし、クライアント上のminimongoは、実際にログインする前に(接続を切断して再接続したとき)、偽陽性を示しているようです。
私の質問は:クライアントにMeteor.user()
が定義されている場合、サーバでthis.userId
が定義されていると思っても問題ありませんか?現在のところ、私はできないと言っています。それで、ユーザーが本当にクライアント側からログインしているかどうかを確実に判断する方法はありますか?
あなたのメソッドで 'this.userId'の代わりに[' Meteor.userId() '](http://docs.meteor.com/api/accounts.html#Meteor-userId)を試してみたらどうでしょうか? – ghybs