在登录表单上添加自定义字段

Add custom field on signin form

使用 meteor useraccounts 包,我想在 signIn 表单中添加一个自定义字段(名为 token)以启用 2fa 身份验证。

不幸的是 AccountTemplates.addField 仅适用于 signUp 形式,据我所知。

有什么提示吗?

帐户包有一个 Accounts.onLogin 函数,您可以使用它来调用方法和更新用户帐户。

Accounts.onLogin(function(user) {
  Meteor.call('setToken', user)
})

然后是

Meteor.methods({
  setToken: function(user) {
    // Do some clever check
    Meteor.users.update(/* Set your token */);
  },
});

使用方法的优点是您可以进行一些服务器端检查以确保您的令牌未被黑客入侵。

我设法实现的答案是用不同的方法改变模式,直接使用 Meteor API:

  1. 在用户集合上设置一个特殊字段:tokenverified: false
  2. 添加Meteor.onLogin(每次登录或手动刷新页面时调用)和Meteor.onLogout回调以将此字段设置为false
  3. 创建一个模板verify2FA来处理令牌并设置tokenverified: true
  4. 创建一个 iron-router 插件 ensure2FA,它将检查此令牌并重定向到 verify2FA 模板。