2016-08-14 4 views
1

Я хочу иметь два макета, один для гостей, который может видеть некоторые маршруты, такие как: , /contacts, /rules и т. Д. ... и еще один для аутентифицированных пользователей, это означает, что они должны прежде чем они смогут перейти на авторизованные маршруты. Как определить два макета для разных групп маршрутов?Несколько макетов в ember.js 2.7.0

+0

Добро пожаловать в переполнение стека! Покажите код, чтобы узнать, что вы пробовали до сих пор. –

+1

Я абсолютно новичок в ember.js, и у меня нет никакого кода, я просто хочу понять концепцию, как я могу использовать множество макетов в ember. –

ответ

0

есть способ использовать маршрутизатор Ember в свою пользу, чтобы решить эту проблему путем вложения аутентифицированных маршрутов внутри маршрут. Вот пример маршрутизатора:

Router.map(function() { 
    this.route('contacts'); 
    this.route('rules'); 

    this.route('authenticated', { path: '/' }, function() { 
    this.route('settings'); 
    this.route('profile'); 
    }); 
}); 

Переход к /contacts и /rules не нужно никакой аутентификации, но собирается /settings бы.

Обратите внимание, что опция path передана на маршрут authenticated. Поскольку мы установили его в /, чтобы он не отображался в URL-адресе, он заменит application.index. Если это звучит странно для вас, прочитайте о том, какая индексная страница in the Ember.js tutorial.

+1

Я реализовал @ блокировки, предлагаемые .. вот ember-twiddle..https: //ember-twiddle.com/f91a385096a2acb1f1e30be94b2b2879 Я включил службы для поддержания состояния аутентификации. – kumkanillam

+0

спасибо, ребята, похоже, что я искал –

+0

@kumkanillam, вы проверите этот URL-адрес twiddle? – sheriffderek

0

Ответ заключается в обслуживании, которое сохраняет состояние пользователя.

// services/user-state 
import Ember from 'ember'; 

export default Ember.Service.extend({ 
    loggedIn: true 
}); 

Затем, в зависимости от того, как вы организовывали вещи, вы можете ввести службу в контроллер или маршрут. Итак - у вас будет доступ к loggedIn

В вашем шаблоне вы должны использовать handlebars/htmlbars if helper.

{{#if loggedIn}} 
    render logged-in stuff... 
{{/else}} 
    render message explaining that this is only for logged in users 
{{/if}} 

Вы также можете перенаправить пользователя на другой маршрут на основе текущих данных сеанса. У вас могут быть целые маршруты для определенных ролей или у вас могут быть части вашего шаблона, которые ведут себя по-разному на основе роли.

Если вы не вошли в систему, возможно, вы не сможете посетить страницу своего профиля. Этот маршрут может быть полностью отключен, или он может перенаправить вас на страницу входа. С другой стороны, может быть, это просто компонент кнопки входа в систему или часть вашего шаблона, которая показывает, если вы не вошли в систему против «hello sheriffderek», если бы вы были.

Есть также Ember addons для более надежных «ролевых» контуров. Подумайте о странице блога, которая может иметь кнопку «изменить» для фактического пользователя, но кнопка «флаг» для модератора. В этом случае вы не можете просто иметь совершенно другой маршрут, где-то в нем.

Большинство аутентификационных аддонов/библиотек будут иметь «сервис» с каким-то состоянием сеанса. Но Шаблон wise, основная идея похожа на инструкцию JS if/else.

if (helpful) { 
    this.upvote(); 
} else { 
    // something else 
} 

Надеюсь, это поможет. :)

+0

Вопрос действительно говорит - «макеты» – sheriffderek

+0

Проголосовал без комментариев! наконец, мы здесь, чтобы делиться, учиться и получать удовольствие. – kumkanillam

+0

https://blog.embermap.com/lowest-common-ancestor-fbf5d5313a1 В этом сообщении есть несколько хороших примеров того, когда услуга становится хорошей идеей. :) – sheriffderek

-1

Посмотрите на ember-simple-auth аддона :)

Она имеет много полезных классов все о разрешении, в том числе Mixins для вашего USECASE. Если вы хотите, чтобы сделать маршрут видимым только для зарегистрированных пользователей, просто используйте AuthenticatedRouteMixin так:

/app/routes/protectedRoute.js 
import Ember from 'ember'; 
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; 

export default Ember.Route.extend(AuthenticatedRouteMixin); 
Смежные вопросы