Redirecting not logged-in users with iron-router… Again

前端 未结 5 1916
梦毁少年i
梦毁少年i 2020-12-13 15:05

I am fighting with the common need for redirecting a user to a login page if he is not logged-in (Meteor v0.8.0 on Windows 7).

There are several similar questions on

5条回答
  •  春和景丽
    2020-12-13 15:24

    Ok, so it seems that the render function on a route only renders a template into the current layout. To render a template into a different layout you have to call this.setLayout('templateName'). The one caveat seems to be that you'll need to set the layout back after login.

    onBeforeAction: function(pause) {
        var routeName = this.route.name;
    
        if (_.include(['login'], routeName))
            return;
    
        if (! Meteor.userId()) {
            this.setLayout("newLayout");
            this.render('login');
    
            //if you have named yields it the login form
            this.render('loginForm', {to:"formRegion"});
    
            //and finally call the pause() to prevent further actions from running
            pause();
        }else{
            this.setLayout(this.lookupLayoutTemplate());
        }
    }
    

    You could also just render the login template as the layout if your login template is all you need by calling this.setLayout('login')

提交回复
热议问题