簡體   English   中英

流星用戶始終在客戶端未定義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM