我正在用咒语开发流星中的应用程序。这是users模块的route.jsx。我希望能够在其他模块的动作和路由中使用requireLoginredirectUsers。还是总的来说,我如何在不违反口头禅架构的情况下处理横切关注点?

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 />)
      });
    }
  });
}

最佳答案

我一直在/clients/modules/core/libs/中定义共享函数,并在任何地方使用它。当您使用core模块外部的函数时,我破坏了封装,但是我没有找到更好的方法。让我知道你是否知道一个。

同样,在triggersEnter中重定向和认证也被视为反模式。

这是我的开源Mantra应用程序Vym中的真实示例。看到那里位:


https://github.com/vymio/vym/blob/aaa7b97786170ae0a5cad2229e4370744850e261/client/modules/core/containers/home.js#L16
https://github.com/vymio/vym/blob/master/client/modules/core/libs/auth.js#L4-L14


如果您想查看更多回购信息,请使用here

您还可以使用此reusable auth composer并在组件级别处理身份验证。

07-24 14:20