Метеор с мантрой. Сквозные проблемы

Я разрабатываю приложение в метеоре с мантрой. Это route.jsx модуля users. Я хочу иметь возможность использовать requireLogin и redirectUsers в действиях и маршрутах других модулей. Или в целом, как мне справиться со сквозными проблемами, не нарушая архитектуры мантры?

import React from 'react';
import {mount} from 'react-mounter';

import Login from './containers/login';
import Register from './containers/register';
import App from '/client/modules/core/components/app.jsx';

export default function (injectDeps,{FlowRouter,Meteor,LocalState}) {
  let userRoutes = FlowRouter.group({
    prefix:'/user',
    name:'user'
  });

  const AppCtx = injectDeps(App);

  const redirectUsers = () => {
      if(Meteor.userId()){
        const path = LocalState.get('INTERRUPTED_REQUEST_PATH')
          ? LocalState.get('INTERRUPTED_REQUEST_PATH') : '/joke/';
        FlowRouter.go(path);
        return;
      }
  }

  const requireLogin = (path) => {
      if(!Meteor.userId()){
          LocalState.set('INTERRUPTED_REQUEST_PATH',path);
          FlowRouter.go('/user/login');
        return;
      }
  }

  userRoutes.route('/', {
    triggersEnter: [(context,redirect) => {
      if(!Meteor.userId()){
         requireLogin('/user/login');
      }
    }],
    action() {
    }
  });

  userRoutes.route('/login',{
    triggersEnter: [(context,redirect) => {
      redirectUsers();
    }],
    action() {
      mount(AppCtx, { 
        content: () => (<Login />)
      });
    }
  });
}

person Dulguun Otgon    schedule 17.03.2016    source источник


Ответы (1)


Я определял общие функции в /clients/modules/core/libs/ и использовал их где угодно. Я нарушаю инкапсуляцию, когда вы используете функцию вне модуля core, но я не нашел лучшего способа. Дайте мне знать, если вы знаете один.

Кроме того, антипаттерном считается перенаправление и аутентификация в triggersEnter.

Вот реальный пример из моего приложения Mantra с открытым исходным кодом Vym. Смотрите там биты:

Репозиторий доступен здесь, если вы хотите увидеть больше.

Вы также можете использовать этот компоновщик авторизации многократного использования и обрабатывать аутентификацию на уровне компонентов.

person Sung Cho    schedule 21.04.2016
comment
Спасибо, я думаю, что поместить сквозную логику в функцию композитора и использовать ее везде, где это необходимо, действительно хороший подход. - person Dulguun Otgon; 21.04.2016
comment
Но как насчет уровня действия? Например, каждый пользователь может просматривать компонент, но только зарегистрированные пользователи могут делать X и Y. - person Dulguun Otgon; 21.04.2016