我正在尝试使用Meteor的帐户密码包让React / Meteor使用电子邮件验证。我正在使用React Router。我不确定放在哪里/怎么称呼它:
Accounts.onEmailVerificationLink(function(token, done) {
Accounts.verifyEmail(token);
});
我有一个注册组件和容器,我正在尝试将验证电子邮件链接到登录组件/容器并进行验证。我在Meteor中完成了以下操作。(isServer)Meteor.startup块:
Accounts.urls.verifyEmail = function(){
return Meteor.absoluteUrl("restaurantsignin");
};
我的反应路由器文件如下所示:
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
电子邮件验证链接正在成功发送,并正确地重定向到/ restaurantsignin链接。我只是不确定如何在用户到达登录页面时对其进行正确验证 - 我希望在用户登录之前对其进行验证(一旦他们点击链接) - 流星docs说使用上面的帐户代码片段但除此之外,我还没有在网上找到任何东西。非常感谢你的帮助!
答案 0 :(得分:3)
Accounts.urls.verifyEmail
函数接受一个token参数,因此您可以执行以下操作:
Accounts.urls.verifyEmail = function(token) {
return Meteor.absoluteUrl("restaurantsignin?token="+token)
}
然后,用户点击电子邮件中的标记,该标记已经在查询参数中,您可以使用this.props.location.query.token
提取该标记。因此,在您的RestaurantSignIn
组件componentWillMount
中,您可以致电:
Accounts.verifyEmail(this.props.location.query.token, function(error) {...})
如果没有错误,您可以使用this.props.history.replace('/dashboard')
直接导航到经过身份验证的路由,因为Accounts.verifEmail()
会自动将用户登录。