Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Meteor account email verify fails two ways

I have email hooked up on my dev box, and get a verification email after creating a user. I can click on the included link, and it will bring me to my main page.

1) Clicking on the link seems to do some processing, because it redirects to /, but it does not change the verified flag on the user account.

2) It seems to ignore my Accounts.config setting, and only works when I explicitly call

token = Accounts.sendVerificationEmail(userId)

Details:

mrt --version
Meteorite version 0.6.11
Release 0.6.5.1

mrt list --using

standard-app-packages
preserve-inputs
less
coffeescript
iron-router
foundation
http
moment
email
spin
roles
accounts-base
accounts-password
accounts-ui

Server/lib/account.coffee

Accounts.config
  sendVerificationEmail: true          
  forbidClientAccountCreation: true

server method:

Meteor.startup ->
  create_user = (options) ->
    console.log('create_user: ' + options.username)
    userId = Accounts.createUser options

    # should not be necessary, but I get email only when included
    token = Accounts.sendVerificationEmail(userId)


  Meteor.methods({ create_user: create_user })  

After above called, mongo shows:

emails: [ { "address" : "[email protected]" , "verified" : false}]

and

email: { "verificationTokens" : [ { "token" : "N3sLEDMsutTbjxyzX" , "address" : "[email protected]" , "when" : 1.380616343673E12}]}

Get default email:

Hello,    
To verify your account email, simply click the link below.    
http://localhost:3000/#/verify-email/N3sLEDMsutTbjxyzX        
Thanks.    

Clicking above link gets me to:

http://localhost:3000/

But no changes to the mongo db.

I was expecting something pulled in by accounts-password processed /#/verify-email/N3sLEDMsutTbjxyzX and would update the user document.

accounts-base.js tries, with

match = window.location.hash.match(/^\#\/verify-email\/(.*)$/);

but the location hash is empty by this time.

Am I missing something where I need to manually set up routes? Is my use of iron router ruining things? Just in case,

Router.map ->
  this.route 'home',
    path: '/'

  this.route 'inboxes'
  this.route 'availability'
  this.route 'find-agent'
  this.route 'inbox-tour'
  this.route 'availability-tour'
  this.route 'find-agent-tour'

  this.route 'inbox', 
    path: '/inbox/:_id'
    data: () ->

      m = Messages.findOne this.params._id
      m._markRead()
      fixed = _.map m.history.versions, (msg) =>
        msg.left = (msg.author is 'offer')
        msg.body = msg.body.replace( /[\r\n]+/g, "<br>")
        msg
      m.history.versions = fixed
      Session.set  'messageVersions', fixed
      m

    waitOn: db.subscriptions.messages
    loadingTemplate: 'loading'
    notFoundTemplate: 'notFound'

  this.route 'register',
  this.route 'requested',
  this.route 'blog',
  this.route 'test',
  this.route 'aboutUs'        

Router.configure
  layout: 'layout'

  notFoundTemplate: 'notFound'

  loadingTemplate: 'loading'

  renderTemplates: 
    'footer': { to: 'footer' }
    'sidebar': { to: 'sidebar' }



  ### Commented to rule out this routine
  before: ->
    routeName = @context.route.name
    debugger

    # no need to check at these URLs
    #, etc 
    return  if _.include(["request", "passwordReset","register", "tour"], routeName)
    return  if _.intersection(routeName.split('-'), ["tour"]).length > 0
    return if routeName.indexOf('verify-email') != -'' 
    user = Meteor.user()
    unless user
      #@render (if Meteor.loggingIn() then @loadingTemplate else "/")
      if Meteor.loggingIn()
        console.log('still logging in, no user, to ' + @loadingTemplate)
        @render @loadingTemplate
        console.log('!render ' + @loadingTemplate + ' completed' )
      else
        console.log('no user, / from router over ' + @loadingTemplate)
        @render "home"
      @stop()
  ###

Thanks!

like image 630
Jim Mack Avatar asked Oct 01 '13 09:10

Jim Mack


1 Answers

Apparently there is a known issue with iron router and URLs that have hashbangs in the path, as the one it is generated with the email :

https://github.com/EventedMind/iron-router/issues/3

I suggest you try implement the same solution as the user samhatoum says (careful that I think since he put the code on the extends method in RootController has changed for extend.

like image 111
vinaut Avatar answered Nov 15 '22 11:11

vinaut