Javascript 流星';s Accounts.onEmailVerificationLink与React和React路由器连接

Javascript 流星';s Accounts.onEmailVerificationLink与React和React路由器连接,javascript,meteor,reactjs,react-router,meteor-accounts,Javascript,Meteor,Reactjs,React Router,Meteor Accounts,我正在尝试使用Meteor的帐户密码包让React/Meteor进行电子邮件验证。我在用路由器。我不知道该放在哪里/怎么称呼它: Accounts.onEmailVerificationLink(function(token, done) { Accounts.verifyEmail(token); }); 我有一个注册组件和容器,我正在尝试获取验证电子邮件,以链接到登录组件/容器并进行验证。我在Meteor.(isServer)Meteor.startup块中执行了以下操作: Accoun

我正在尝试使用Meteor的帐户密码包让React/Meteor进行电子邮件验证。我在用路由器。我不知道该放在哪里/怎么称呼它:

Accounts.onEmailVerificationLink(function(token, done) {
 Accounts.verifyEmail(token);
});
我有一个注册组件和容器,我正在尝试获取验证电子邮件,以链接到登录组件/容器并进行验证。我在Meteor.(isServer)Meteor.startup块中执行了以下操作:

Accounts.urls.verifyEmail = function(){
 return Meteor.absoluteUrl("restaurantsignin");
};
我的react路由器文件如下所示:

Meteor.startup(() => {
  render(
    <Router history={browserHistory}>
      <Route path="/" component={App}>
        <IndexRoute component={Home} />
        <Route path="/about" component={About} />
        <Route path="/restaurantsignin" component={RestaurantSignInContainer} />
        <Route path="/restaurantsignup" component={RestaurantSignUpContainer} />
        <Route path="/customersignup" component={CustomerSignUpContainer} />
        <Route path="/restaurantresetemail" component={RestaurantResetEmailContainer} />
        <Route path="/restaurantresetpassword" component={RestaurantResetPasswordContainer} />

        <Route path="/restaurant/:restaurantName" component={MenuPage} />
      </Route>
    </Router>, document.getElementById('app')
  );

});
import React from 'react';
import Radium from 'radium';
import ReactDOM from 'react-dom';
import { Alert, Button } from 'react-bootstrap';

export default class RestaurantSignIn extends React.Component {

  handleAlertVerifiedDismiss() {
    document.getElementById('alert_verified_box').style.display = 'none';
  }

  render() {
    var styles = {
.
.
.
  return (
    <div style={styles.signInContainer}>
. 
.
.
and so on
流星启动(()=>{ 渲染( ,document.getElementById('app') ); }); 我的react组件文件如下所示:

Meteor.startup(() => {
  render(
    <Router history={browserHistory}>
      <Route path="/" component={App}>
        <IndexRoute component={Home} />
        <Route path="/about" component={About} />
        <Route path="/restaurantsignin" component={RestaurantSignInContainer} />
        <Route path="/restaurantsignup" component={RestaurantSignUpContainer} />
        <Route path="/customersignup" component={CustomerSignUpContainer} />
        <Route path="/restaurantresetemail" component={RestaurantResetEmailContainer} />
        <Route path="/restaurantresetpassword" component={RestaurantResetPasswordContainer} />

        <Route path="/restaurant/:restaurantName" component={MenuPage} />
      </Route>
    </Router>, document.getElementById('app')
  );

});
import React from 'react';
import Radium from 'radium';
import ReactDOM from 'react-dom';
import { Alert, Button } from 'react-bootstrap';

export default class RestaurantSignIn extends React.Component {

  handleAlertVerifiedDismiss() {
    document.getElementById('alert_verified_box').style.display = 'none';
  }

  render() {
    var styles = {
.
.
.
  return (
    <div style={styles.signInContainer}>
. 
.
.
and so on
从“React”导入React;
从“镭”进口镭;
从“react dom”导入react dom;
从“react bootstrap”导入{Alert,Button};
导出默认类RestaurantSignIn扩展React.Component{
handleAlertVerifiedDismiss(){
document.getElementById('alert_-verified_-box')。style.display='none';
}
render(){
变量样式={
.
.
.
返回(
. 
.
.
等等

电子邮件验证链接已成功发送,并且正在正确重定向到/restaurantsignin链接。我只是不确定用户到达登录页面后如何正确验证他们--我希望在他们登录之前对他们进行验证(只要他们单击链接)--meteor文档说要使用上述帐户代码片段,但除此之外,我还没有在网上找到任何东西。非常感谢您的帮助!

Accounts.url。verifyEmail
函数包含一个令牌参数,因此您可以执行以下操作:

Accounts.urls.verifyEmail = function(token) {
  return Meteor.absoluteUrl("restaurantsignin?token="+token)
}
然后,用户单击电子邮件中的链接,该令牌已经在查询参数中,您可以使用
this.props.location.query.token
提取该参数。因此,在
餐厅Signin
组件的
组件willmount
中,您可以调用:

Accounts.verifyEmail(this.props.location.query.token, function(error) {...})

如果没有错误,您可以使用
this.props.history.replace('/dashboard')
直接导航到经过身份验证的路由,因为
Accounts.verifEmail()
会自动让用户登录。

谢谢!它可以工作。.我使用
browserHistory.push
而不是
this.props.history.replace