Meteor:使用铁路由器和自定义身份验证问题

时间:2014-07-10 17:19:22

标签: meteor

我可能会非常接近,但我缺乏解决这个问题的知识。

我想使用自定义身份验证系统而不是使用accounts-ui,因此我可以跟踪有关每个用户的一些其他详细信息。

一切顺利,直到我进入resetPassword部分。如果用户以forgetPassword表单提交其电子邮件地址,则会收到该电子邮件。但是当您单击电子邮件中的重置密码链接时,它不会显示resetPassword模板。

这是在这里: Meteor account email verify fails two ways

这里的铁路由器github问题跟踪器(其中修复程度最高的是注册帐号,而不是resetPassword,我假设它应该非常相似): Iron-router swallows Accounts.sendEnrollmentEmail

如果我从上面的铁路由器问题跟踪器中正确理解,铁路由器没有(或者没有,可能仍然没有)支持像重置密码电子邮件中发送的那样的hashbang网址。一个URL,如:

http://localhost:3000/#/reset-password/T4rPxcVNWKwBONHSRajSk7dNZvM_YRxTLyzxZVv5SuU

然后更新Meteor,以便meteor账户基础上删除#之后的所有内容,并将它们存储在Accounts名称空间中的变量中。

虽然我认为我理解了所有这些,但现在的问题是为什么我无法在问题跟踪器中获取有关我的重置密码代码的建议。我正在使用Julien Le Coupanec的自定义身份验证系统中的所有内容,然后我从问题跟踪器中完成了以下操作:

router.js

Router.map(function() {
  this.route('invList', {path: '/'});
    this.route('resetPassword', {
        controller: 'AccountController',
        path: '/reset-password/:token',
        action: 'resetPassword'
    });

});


AccountController = RouteController.extend({
  resetPassword: function () {
    Accounts.resetPassword(this.params.token, function () {
      Router.go('/reset-password');
    });
  }
}); 

/ server

中的overrideaccounts.js
(function () {
    "use strict";

    Accounts.urls.resetPassword = function (token) {
        return Meteor.absoluteUrl('reset-password/' + token);
    };

    Accounts.urls.verifyEmail = function (token) {
        return Meteor.absoluteUrl('verify-email/' + token);
    };

    Accounts.urls.enrollAccount = function (token) {
        return Meteor.absoluteUrl('enroll-account/' + token);
    };

})();

我想知道这些问题是否与我的错误路由无关(可能因为我还没有将我的脑袋缠绕好),如果我把“服务器代码”列为在正确的位置发出跟踪,或者下面的会话相关代码是导致resetPassword模板不显示的原因。或者其他我当然缺少的东西。

main.js

//forgotPassword helper and event handler
Template.main.helpers({
    showForgotPassword: function() {
        return Session.get('showForgotPassword');
    },
    resetPassword: function(){
        return Session.get('resetPassword');
    }
});

在我认为是一个非常简单的身份验证系统上花了好几个小时后,我仍然感到茫然。感谢任何建议!

1 个答案:

答案 0 :(得分:3)

不要闯入哈希和铁路由器,只需回到流星原始设计流程。

当用户点击电子邮件中的验证链接时,它会返回“/”(主页),所以就这样做了:

Template.home.created = function() {
  if (Accounts._verifyEmailToken) {
    Accounts.verifyEmail(Accounts._verifyEmailToken, function(err){
      if (err != null) {
        // handle the error
        } else {
          // do what you want, maybe redirec to some route show verify successful message
        }
      });
    }
  };

我这样做并验证了电子邮件的正确性,同样适用于注册,重置密码...