Пользователь Meteor всегда неопределен на стороне клиента - PullRequest
0 голосов
/ 02 ноября 2018

У меня один вопрос, я новичок в 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

1 Ответ

0 голосов
/ 03 ноября 2018

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-candy, и если вы действительно хотите запретить непроверенным пользователям подписываться на данные или вызывать определенные методы / обновлять данные, вы всегда должны проверять user.emails[i].verified в методах и публикациях.

...