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 に変更はありません。

accounts-password によって処理された /#/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

電子メールで生成されるものとして、パスにハッシュバングがある鉄のルーターと 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 に答える