我有一个问题,我是MeteorJS的新手,认为我需要一些帮助。我实施了电子邮件帐户验证。接下来,我想登录用户,但前提是用户已验证。这是问题所在,因为客户端中始终未定义Meteor.user()
。您能帮我解释一下我做错了什么吗?
class App extends Component {
constructor(props){
super(props);
this.state = {
verified: this.props.currentUser.emails[0].verified
};
}
render(){
return (
<div>
<Navbar collapseOnSelect fluid>
<nav className="sideBar-menu">
<div className="pull-right sidebar-right">
<ButtonToolbar className="pull-left sidebar-toolbar">
{!this.state.verified && <Button>Sign in</Button>}
{this.state.verified && <Button>Sign out</Button>}
<Button bsStyle="danger">Sign up</Button>
</ButtonToolbar>
</div>
</nav>
</Navbar>
</div>
)
}
}
const dataHOC = withTracker((props)=>{
return {
currentUser: Meteor.user()
}
})(App);
export default dataHOC
答案 0 :(得分:2)
Meteor.user()
仅在当前用户登录后返回当前用户的对象。因此,如果没有用户登录,则无法使用currentUser
上的属性。
因此,您的状态可以使用两个值进行登录和验证:
const currentUser = this.props.currentUser
this.state = {
loggedIn: currentUser,
verified: currentUser && currentUser.emails[0].verified
};
如果没有登录状态,渲染代码将显示sign-in
元素:
<ButtonToolbar className="pull-left sidebar-toolbar">
{!this.state.loggedIn && <Button>Sign in</Button>}
{ this.state.loggedIn && <Button>Sign out</Button>}
<Button bsStyle="danger">Sign up</Button>
</ButtonToolbar>
然后,您可以使用verified
显示更多信息,例如有关您的用户尚未验证的通知,并仅显示已验证用户的内容。
安全说明:请注意,这全都是UI糖果,如果您确实想防止未经验证的用户订阅数据或调用某些方法/更新数据,则应始终检查{{ 1}}中的方法和出版物。