使用meteor iron:router管理登录
我正在我的meteor.js应用程序中创建一个私人区域;使用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'); });
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”);
}
});
}
});
}