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