6

我在我的开发箱上连接了电子邮件,并在创建用户后收到一封验证电子邮件。我可以单击包含的链接,它会将我带到我的主页。

1)点击链接似乎做了一些处理,因为它重定向到/,但它不会改变用户帐户上的已验证标志。

2)它似乎忽略了我的 Accounts.config 设置,并且仅在我明确调用时才有效

token = Accounts.sendVerificationEmail(userId)

细节:

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

服务器/lib/account.coffee

Accounts.config
  sendVerificationEmail: true          
  forbidClientAccountCreation: true

服务器方法:

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 })  

在上面调用之后,mongo 显示:

emails: [ { "address" : "jim@less2do.com" , "verified" : false}]

and

email: { "verificationTokens" : [ { "token" : "N3sLEDMsutTbjxyzX" , "address" : "jim@less2do.com" , "when" : 1.380616343673E12}]}

获取默认电子邮件:

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

点击上面的链接可以让我:

http://localhost:3000/

但是mongo db没有变化。

我期待通过帐户密码处理的 /#/verify-email/N3sLEDMsutTbjxyzX 提取一些东西并更新用户文档。

accounts-base.js 尝试使用

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

但此时位置哈希为空。

我错过了需要手动设置路线的东西吗?我使用铁路由器会破坏东西吗?以防万一,

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()
  ###

谢谢!

4

2 回答 2

5

显然,铁路由器和路径中有 hashbang 的 URL 存在一个已知问题,因为它是通过电子邮件生成的:

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

我建议您尝试实现与用户 samhatoum 说的相同的解决方案(我认为由于他将代码放在extendsRootController 中的方法上已更改为extend.

于 2013-10-03T23:14:29.763 回答
3

我确认,这现在完美无缺。这是我重定向到应用程序根目录后所做的事情。

阅读更多使用 Meteor 帐户验证电子邮件

// (client-side)
Template.Homepage.created = function() {
  if (Accounts._verifyEmailToken) {
    Accounts.verifyEmail(Accounts._verifyEmailToken, function(err) {
      if (err != null) {
        if (err.message = 'Verify email link expired [403]') {
          console.log('Sorry this verification link has expired.')
        }
      } else {
        console.log('Thank you! Your email address has been confirmed.')
      }
    });
  }
};
于 2014-08-25T13:24:51.160 回答