【问题标题】:Aurelia Router: Good pattern for authorizing child routesAurelia Router:授权子路由的好模式
【发布时间】:2018-03-22 23:23:46
【问题描述】:

我想在子路由器上授权路由,但我对当前的解决方案并不满意。我当前的路线如下所示:

/
/account
/account/signin
/account/signout

为了实现这一点,我为帐户页面定义了两个路由器 - 一个根路由器和一个子路由器。为了在我的帐户子路由器上授权路由,我将以下管道步骤添加到我的根路由器配置中。

config.addAuthorizeStep({
    run: (instruction: NavigationInstruction, next: Next): Promise<any> => {
        if (!this.auth.isAuthenticated && (instruction.fragment === '/account' || instruction.fragment === '/account/profile')) {
            return next.cancel(new Redirect('account/signin'))
        }

        if (this.auth.isAuthenticated && instruction.fragment === '/account/signin') {
            return next.cancel(new Redirect('account'))
        }

        if (this.auth.isAuthenticated && instruction.fragment === '/account/signup') {
            return next.cancel(new Redirect('account'))
        }

        return next();
    }
})

它有效,但我觉得必须有更好的方法......我真的很想完成以下工作:

  1. 将授权逻辑移至帐户子路由器。
  2. 使用路由名称而不是片段,因为它看起来更健壮

【问题讨论】:

标签: aurelia


【解决方案1】:

您可以将 auth 属性添加到路由配置并检查该属性

http://aurelia.io/docs/routing/configuration#pipelines

import {Redirect} from 'aurelia-router';

export class App {
  configureRouter(config) {
    config.addAuthorizeStep(AuthorizeStep);
    config.map([
      { route: ['', 'home'],       name: 'home',       moduleId: 'home/index' },
      { route: 'users',            name: 'users',      moduleId: 'users/index',  settings: { auth: true } },
      { route: 'users/:id/detail', name: 'userDetail', moduleId: 'users/detail', settings: { auth: true } }
    ]);
  }
}

class AuthorizeStep {
  run(navigationInstruction, next) {
    if (navigationInstruction.getAllInstructions().some(i => i.config.settings.auth)) {
      var isLoggedIn = // insert magic here;
      if (!isLoggedIn) {
        return next.cancel(new Redirect('login'));
      }
    }

    return next();
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多