2016-04-18 20 views
2

Ich versuche eine E-Mail-Bestätigung zu bekommen, um mit React/Meteor zu arbeiten, indem ich Meteor's Account-Passwort-Paket benutze. Ich benutze React Router. Ich bin mir nicht sicher, wo zu setzen/wie dies zu nennen:Meteor's Accounts.onEmailVerificationLink mit React und React Router

Accounts.onEmailVerificationLink(function(token, done) { 
Accounts.verifyEmail(token); 
}); 

Ich habe eine Anmelde-Komponente und Container, und ich versuche, die Überprüfung E-Mail zu bekommen, um die Anmelde-Komponente zu verbinden/Behälter und verifizieren. . Ich habe folgendes in einem Meteor getan (IsServer) Meteor.startup Block:

Accounts.urls.verifyEmail = function(){ 
return Meteor.absoluteUrl("restaurantsignin"); 
}; 

Meine reagieren Routerdatei sieht wie folgt aus:

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') 
); 

}); 

Meine reagieren Komponentendatei sieht wie folgt aus:

Der E-Mail-Bestätigungslink wird erfolgreich gesendet und leitet den Link/restaurantsignin korrekt weiter. Ich bin mir nicht sicher, wie ich den Nutzer überprüfen soll, sobald er die Anmeldeseite erreicht hat - ich möchte, dass er sie überprüft, bevor er sich anmeldet (sobald er auf den Link klickt) Das obige Code-Snippet, aber darüber hinaus habe ich nichts online gefunden. Vielen Dank für die Hilfe!

Antwort

3

Accounts.urls.verifyEmail Funktion nimmt in einem Token-Parameter, so können Sie wie folgt vorgehen:

Accounts.urls.verifyEmail = function(token) { 
    return Meteor.absoluteUrl("restaurantsignin?token="+token) 
} 

Dann klickt der Benutzer auf den Link in der E-Mail das Token bereits in der Abfrage param ist, die Sie mit this.props.location.query.token extrahieren . Also in Ihrem RestaurantSignIn Komponente componentWillMount Sie können auch anrufen:

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

Wenn es keine Fehler gibt Sie direkt zu einem authentifizierten Route mit this.props.history.replace('/dashboard') weil Accounts.verifEmail() den Benutzer automatisch anmeldet

+0

Dank navigieren können.! es funktioniert .. Ich benutze 'browserHistory.push' anstelle von' this.props.history.replace' – novasaint