Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用meteor iron:router管理登录_Meteor_Iron Router - Fatal编程技术网

使用meteor iron:router管理登录

使用meteor iron:router管理登录,meteor,iron-router,Meteor,Iron Router,我正在我的meteor.js应用程序中创建一个私人区域;使用iron router,我定义了一个控制器,用于每个专用路由: panelController = RouteController.extend({ waitOn: function() { Meteor.call('panelAuth', function(error, auth) { if (!auth) Router.go('/panel/login'); });

我正在我的meteor.js应用程序中创建一个私人区域;使用iron router,我定义了一个控制器,用于每个专用路由:

panelController = RouteController.extend({
    waitOn: function() {
        Meteor.call('panelAuth', function(error, auth) {
            if (!auth) Router.go('/panel/login');
        });     
    }
});
这只允许您在通过“panelAuth”方法获得服务器端授权的情况下输入

它工作得很好,但如果您尝试在浏览器的地址栏中键入一段时间内未登录(或在没有所需权限的情况下登录)的私有路由的url,您可以看到路由呈现,然后重定向到登录页面


我想在“panelAuth”决定您是否可以访问时显示loadingTemplate,并在一段时间内避免显示私有路由,我相信您已经知道,您对Meteor.call的调用是异步的。您的路由正在客户端中呈现,然后异步调用返回,导致重新路由

在采取行动之前,您是否尝试过使用
onBeforeAction
?这就是它的目的。尽管我怀疑如果坚持使用异步方法调用,您仍然会遇到问题

Router.onBeforeAction(函数(){
如果(!Meteor.userId()){
this.render('login');
}否则{
这个。下一个();
}
});
因为客户端可以看到您的所有模板(无论您的安全模型如何),所以我将重点放在保护发布上。您可以在登录时存储一个会话变量,指示是否应将用户路由到目标,并对数据发布提供更可靠的检查

下面是一个示例meteor应用程序,使用iron:router、帐户密码和帐户ui

HTML:


使用Meteor登录
你好
{{>loginButtons}

废话!!!!你看见我了!!! 用户名:
密码
提交
Javascript:

//默认页面
Router.route('/',function(){
this.render('hello');
});
//安全页面,需要登录。
Router.route(“/blah”{
onBeforeAction:函数(){
如果(!Meteor.userId()){
this.render('login');
}否则{
这个。下一个();
}
}
});
//处理登录,如果成功,请转到/blah
if(Meteor.isClient){
Template.login.events({
“单击#登录提交”:函数(){
var username=$(“#username”).val();
var password=$(“#password”).val();
Meteor.loginWithPassword(用户名、密码、函数)(错误){
如果(!错误){
Router.go('/blah');
}否则{
警报(“errrrrrrrrooorrr”);
}
});
}
});
}