2016-03-17 4 views
1

Я разрабатываю приложение в метеор с мантрой. Это 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 />) 
     }); 
    } 
    }); 
} 

ответ

1

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

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

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

РЭПО доступна here, если вы хотите увидеть больше.

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

+0

Спасибо, я думаю, что использование перекрестной режущей логики в функции композитора и составление с ней везде, где это необходимо, - действительно хороший подход. –

+0

Но как насчет уровня действия? Например, каждый пользователь может просматривать компонент, но только зарегистрированные пользователи могут делать X и Y –

Смежные вопросы