在Meteor中,我如何设置Facebook登录以使用useraccounts:核心注册字段?

时间:2016-05-21 20:27:59

标签: meteor meteor-accounts

我有一个带Blaze和Flowrouter的Meteor 1.3应用程序。我正在使用useraccounts:core,以及一些相关的包。我已经阅读了guide。我可以使用Facebook / Google / Instagram / Twitter登录。我启用了帐户密码,因为我想强制用户使用社交媒体登录。

我想要做的是按照指南添加一些注册字段:

AccountsTemplates.addField({
    _id: "fruit",
    type: "radio",
    displayName: "Preferred Fruit",
    select: [
        {
        text: "Apple",
        value: "aa",
      }, {
        text: "Banana",
        value: "bb",
      }, {
        text: "Carrot",
        value: "cc",
      },
    ],
});

我注意到了:

  • 我添加的任何字段都不会显示,除非我添加了accounts-password包
  • 即使useraccounts:core允许我(比如说)"登录Facebook" 和"注册Facebook",没有实际的区别。即第一次登录计为注册

我想要的是以下内容:

  • 如果用户没有帐户,"使用Facebook登录"不会自动注册
  • 我可以使用内置的注册页面和addFields功能用于社交媒体帐户,强制FB et。人。用户填写我的注册字段
这可能吗?据我所知,即使我启用了帐户密码并添加了我的字段,也没办法(使用这些软件包)强制任何人正确注册。他们可以简单地用Facebook登录"并有一个帐户。

我有什么东西可以找到可用的东西吗?如果没有,其他人如何在不废弃使用这些包并从头开始构建的情况下完成我想做的事情?

1 个答案:

答案 0 :(得分:0)

所以这就是我所做的......

我提供并添加了帐户密码以获得注册功能,但禁用使用用户名/密码登录并禁用使用社交媒体注册。我的下一步是在注册和登录后立即强制他们链接到社交媒体帐户。

在服务器上,我使用Accounts.validateNewUser()失败,除非有密码。这允许通过帐户密码注册,但不允许OAuth注册。在客户端注册屏幕上,我使用jQuery删除atForm中显示社交注册的DOM节点。

同样在服务器上,如果attemptInfo.allowed为false,我使用Accounts.validateLoginAttempt()失败。这捕获了有人第一次使用社交媒体登录(即附加到没有现有帐户)的情况。在客户端上,使用jQuery,我删除atForm中的DOM节点,在登录页面上显示accounts-ui登录。

它有点难看,但它大部分都有效。我想禁止在Accounts.validateLoginAttempt()中登录用户名/密码,但是在Accounts.validateNewUser()之后立即调用,我需要用户登录,以便我可以强制他们链接社交媒体帐户。即他们可以在下次登录。如果我能找到一种方法来区分与注册相关的登录和以后的登录,我会这样做。

我愿意接受改进建议!