Если честно, я отказался от идеи использовать пакет для создания пользовательского интерфейса для системы учетных записей.
Пакет meteor-useraccounts был создан для Blaze, и хотя вОфициальные документы Meteor рекомендуют обернуть шаблон {{> atForm }}
, который преобразует формы для входа в систему, регистрации и т. д. в компонент React. Я обнаружил, что он вызывает несовместимость, особенно при обработке маршрутов.(Я использовал пакет gadicc:blaze-react-component
для упаковки.) В конце концов я обнаружил, что пытаюсь понять этот черный ящик, который состоит из нескольких слоев, в том числе.еще один для предварительной стилизации bootstrap4.Например, я также не смог заставить работать проверку электронной почты.
Поэтому я решил сбросить все это и сам начал создавать весь пользовательский интерфейс и логику поверх Meteor Accounts и Meteor API паролей .
Теперь перенаправление чертовски просто, потому что я могу сделать это в своем собственном React.Component.Единственное, что вам нужно сделать, это import { withRouter } from 'react-router';
, затем export default withRouter(LogInOutButton);
и, наконец, вы можете использовать this.props.history.push("/signIn")
для перенаправления:
import React, { Component } from 'react';
import { withRouter } from 'react-router';
class LogInOutButton extends Component {
constructor(props) {
super(props);
this.state = {
loggedIn: Meteor.userId() ? true : false,
}
this.redirectToSignIn = this.redirectToSignIn.bind(this);
}
redirectToSignIn() {
if (this.state.loggedIn)
Meteor.logout()
if (document.location.pathname !== "/signIn")
this.props.history.push("/signIn")
}
render() {
return (
<li className="nav-item">
<a className="nav-link" href="#"
onClick={this.redirectToSignIn}>
{Meteor.userId() ? "Sign Out" : "Sign In"}
</a>
</li>
)
}
}
export default withRouter(LogInOutButton);
PS: (Просто мое мнение) Конечно, есть вещи, которые нужно решить при создании собственного пользовательского интерфейса / логики для системы учетных записей.Например, проверка формы.(Я решил построить поверх проверки HTML5, но добавлю свой собственный визуальный отклик с помощью bootstrap4 .)
Я полагаю, в случае с Meteor и Реагируют тамна данный момент просто нет рабочего пакета.Я попробовал их все, поверь мне.Все они были болью в заднице (при попытке интегрировать их с React) или недостаточно настраиваемыми.Если бы я потратил время на то, чтобы построить свой собственный с самого начала, я бы уже давно закончил.И самое замечательное в том, чтобы сделать это самостоятельно, вы знаете, как это работает, и можете легко улучшить и повторно использовать его позже.
Это также помогает поддерживать низкую зависимость, что я считаю крайне важным, потому что проект Meteor прогрессировал ибыстро меняется в последние годы.Проще поддерживать ваш проект в актуальном состоянии, когда вы знаете, что сделали.