Reputation: 4407
I'm using Iron router. Some routes of my project require to be rendered only if user is logged in, and some - no matter if user is logged in or not. I tried to registerHelper
which defines if page requireLogin
or not, but for some reason even if a route does require login, a wrong section is rendered.
Here's a layout template:
<template name="layout">
{{#if requireLogin}}
<!-- ... render route content or login form ... -->
{{#if currentUser}}
{{> yield}}
{{/if}}
{{#unless currentUser}}
{{> loginPage}}
{{/unless}}
{{/if}}
{{#unless requireLogin}}
<!-- ... render route content ... -->
{{> yield}}
{{/unless}}
</template>
Example route pages with requireLogin
information:
<template name="pageUser">
{{requireLogin true}}
<!-- ... some user page content ... -->
</template>
<template name="pageTermsOfUse">
{{requireLogin false}}
<!-- ... some Terms of use page content ... -->
</template>
And Client code:
if (Meteor.isClient) {
Handlebars.registerHelper("requireLogin", function (requireLogin) {
console.log(requireLogin)
return requireLogin;
});
};
A console.log
should return true
for User Page, and false
for Terms of use Page, but instead it logs:
undefined
undefined
true
Even when requireLogin
is set to True a section {{#unless requireLogin}}
is rendered. Any suggestion how to solve this problem may help.
Upvotes: 0
Views: 182
Reputation: 2386
You'll need to save the requireLogin
value somewhere. You can simply use a session variable.
Template.registerHelper("requireLogin", function (requireLogin) {
if(requireLogin) Session.set('requireLogin', requireLogin);
return Session.get('requireLogin');
});
Also, I'd use Template
and not Handlebars
.
Upvotes: 0