首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular2 -回溯-Security实现

Angular2 -回溯-Security实现
EN

Stack Overflow用户
提问于 2017-06-13 14:19:33
回答 1查看 321关注 0票数 0

在一个角度回溯项目中,我们能做的安全实现是什么?头盔是否已经在环回中实现了?

EN

回答 1

Stack Overflow用户

发布于 2017-06-13 14:58:59

因此,为了让您的生活更加轻松,我建议您看看@mean/循环往复-sdk-builder,它将自动创建一个模块,以便导入到您的应用程序中,为您提供您的API端点所需的所有服务。

现在,对于以角表示的安全实现,我建议编写路由保护程序,并延迟加载路由。下面是我的一个应用程序中有一个路由保护的例子

代码语言:javascript
复制
import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
import { Observable, Subscription } from 'rxjs';

import { UserService } from '../services/user.service';

@Injectable()
export class UserGuard implements CanActivate {
  private _user: any;
  private _userSubscription: Subscription;

  constructor(private _router: Router, private _userService: UserService) {
    this._userSubscription = this._userService.user.subscribe((user: any) => {
      this._user = user;
    });
  }

  canActivate(): boolean {
    if (this._user) {
      return true;
    }
    this._router.navigate(['/', 'sign-in']);
    return false;
  }
}

我还有一个自定义用户服务,它使用SDK构建器为我创建的帐户/用户服务。

代码语言:javascript
复制
import { Injectable, Inject } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';

import { User, SDKToken } from '../sdk/models';
import { UserApi, LoopBackAuth } from '../sdk/services';

@Injectable()
export class UserService {
  private _user: BehaviorSubject<any> = new BehaviorSubject<any>(null);

  constructor(private _userApi: UserApi, @Inject(LoopBackAuth) protected auth: LoopBackAuth) {
    this._restoreUser();
  }

  get user(): Observable<any> {
    return this._user.asObservable();
  }

  private _restoreUser(): void {
    this._user.next(this.auth.getCurrentUserData());
  }

  public signIn(user: User, callback?: any): void {
    this._userApi.login(user).subscribe((token: SDKToken) => {
      this.auth.save();
      const user: any = this.auth.getCurrentUserData();
      this._user.next(user);
      if (callback) {
        callback(null, user);
      }
    }, (error: any) => {
      if (callback) {
        callback(error.message, null);
      }
    });
  }

  public signOut(callback?: any): void {
    try {
      this._userApi.logout().subscribe();
    } catch (e) { }
    this.auth.clear();
    this._user.next(null);
    if (callback) {
      callback(null, true);
    }
  }

  public signUp(user: User, callback?: any): void {
    this._userApi.create(user).subscribe((account: any) => {
      if (callback) {
        callback(null, account);
      }
    }, (error: any) => {
      if (callback) {
        callback(error.message, null);
      }
    });
  }
}

我们允许SDK Builder处理令牌的缓存,对于需要用户身份验证的API端点,我们可以使用来自新创建的用户服务的令牌id ( SDK构建器的服务将需要它!)

最后要看的是将应该被保护的路由迁移到它们自己的模块中。这样做将允许我们只在需要的时候延迟加载这些组件!(而不是在应用程序一加载就进来)。这需要更多的工作,所以我建议看一下这个Rangle.io指南

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44524192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档