Facebook帐户的Meteor Iron路由器登录路由传递不起作用

Facebook帐户的Meteor Iron路由器登录路由传递不起作用,meteor,iron-router,meteor-accounts,Meteor,Iron Router,Meteor Accounts,问题: 当我的普通用户使用标准电子邮件/密码“帐户密码”进入登录重定向页面时,他们可以输入凭据,路由器将继续呈现请求的页面 例如: /私有页面(需要登录)。用户尝试进入登录页面时,会显示登录页面。用户正确输入用户名/密码,现在显示/private_页面 这行得通,什么不行 与上面的示例相同,但现在用户正在使用Facebook“帐户Facebook”进行身份验证。一切都与以前一样,用户已成功登录Facebook,并且能够进入我的web应用程序,但路线从不显示/private_页面。它停留在已验证/

问题:

当我的普通用户使用标准电子邮件/密码“帐户密码”进入登录重定向页面时,他们可以输入凭据,路由器将继续呈现请求的页面

例如: /私有页面(需要登录)。用户尝试进入登录页面时,会显示登录页面。用户正确输入用户名/密码,现在显示/private_页面

这行得通,什么不行

与上面的示例相同,但现在用户正在使用Facebook“帐户Facebook”进行身份验证。一切都与以前一样,用户已成功登录Facebook,并且能够进入我的web应用程序,但路线从不显示/private_页面。它停留在已验证/登录页面上,而不显示登录模板

简而言之 我如何让facebook认证的用户像普通的基于密码的用户一样通过并路由到请求的路由

Iron路由器配置:

Router.onBeforeAction(function () {    
    if  (!Meteor.userId() && !Meteor.loggingIn()) {
        this.redirect('login');
        this.stop();
    } else {
        this.next();
    }
},{except: ['login', 'contact, 'terms']});
Meteor软件包:

accounts-password@1.3.6
accounts-facebook@1.2.0
service-configuration@1.0.11
useraccounts:bootstrap
useraccounts:iron-routing

我终于找到了解决办法

在查看Meteor包的Github问题后:(Meteor useraccounts)我发现了我一直遇到的问题

我花了太多的时间试图让钩子在我使用Outh Facebook和Meteor时正确地发射。我的最终解决方案是直接连接Meteor方法调用,创建自己的登录、注册、密码重置等表单

好的一面是,我现在可以完全控制表单,不需要处理额外的包

如果有人发现了这篇文章,并且在制作类似postSignUpHook的“meteor useraccounts”fire钩子时遇到了问题,那么您可以决定放弃这个包,创建自己的用户帐户模板,并将逻辑连接到使用本机meteor方法

我提交的这个问题是因为oAuth Facebook将登录,但我无法使它重定向到最初请求的路由。oAuth可以工作,我的用户可以登录到我的web应用程序,但我无法让他们访问最初请求的url

我是如何解决这个问题的:

图书馆/路线

要从上面的代码片段中去掉的关键点是我声明的全局变量originalUrl。这是使用路由器This.originalUrl。此url包含用户输入的原始url,并在iron路由器重定向到登录页面之前被捕获

现在在登录页面上,我使用自己的自定义模板创建了两种不同的登录方法。他们都在使用Meteor.loginWithPassword和Meteor.loginWithFacebook方法

client/login.js

希望这能帮助其他可能遇到这个问题的人

Router.onBeforeAction(function () {    
    if  (!Meteor.userId() && !Meteor.loggingIn()) {
        originalUrl = this.originalUrl;
        this.redirect('login');
        this.stop();
    } else {
        this.next();
    }
},{except: ['login', 'resetPwd', 'help'] });
    'click #fb-login' : function(e){
        e.preventDefault();
        Meteor.loginWithFacebook({}, function(err){
            if(err) {
              // some error occured
            }
            else {
                if(Router.current().route._path == "/login" && typeof originalUrl == "undefined")
                    Router.go('/');
                else
                    Router.go(originalUrl);
            }
        });
    }