[英]Meteor user always undefined in client side
我有一個問題,我是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
用戶登錄后, 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糖果,如果您確實要防止未驗證的用戶訂閱數據或調用某些方法/更新數據,則應始終檢查方法和方法中是否有user.emails[i].verified
。出版物。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.