2017-05-07 87 views
0

以下是我的package.json连续的XHR调用失败,不知道原因。

{ 
 
    "name": "angular-io-example", 
 
    "version": "1.0.0", 
 
    "private": true, 
 
    "description": "Example project from an angular.io guide.", 
 
    "scripts": { 
 
    "start": "webpack-dev-server --inline --progress --port 8080", 
 
    "test": "karma start karma.webpack.conf.js", 
 
    "build": "rimraf dist && webpack --config config/webpack.prod.js --bail", 
 
    "lint": "tslint ./src/**/*.ts -t verbose" 
 
    }, 
 
    "keywords": [], 
 
    "author": "", 
 
    "license": "MIT", 
 
    "dependencies": { 
 
    "@angular/common": "~4.0.0", 
 
    "@angular/compiler": "~4.0.0", 
 
    "@angular/compiler-cli": "~4.0.0", 
 
    "@angular/core": "~4.0.0", 
 
    "@angular/forms": "~4.0.0", 
 
    "@angular/http": "~4.0.0", 
 
    "@angular/platform-browser": "~4.0.0", 
 
    "@angular/platform-browser-dynamic": "~4.0.0", 
 
    "@angular/platform-server": "~4.0.0", 
 
    "@angular/router": "~4.0.0", 
 
    "@angular/tsc-wrapped": "~4.0.0", 
 
    "@angular/upgrade": "~4.0.0", 
 
    "@okta/okta-signin-widget": "1.7.0", 
 
    "angular-in-memory-web-api": "~0.3.1", 
 
    "aws-sdk": "^2.6.1", 
 
    "core-js": "^2.4.1", 
 
    "rxjs": "5.0.1", 
 
    "zone.js": "0.8.9" 
 
    }, 
 
    "devDependencies": { 
 
    "@types/jasmine": "2.5.36", 
 
    "@types/node": "^6.0.45", 
 
    "angular2-template-loader": "^0.6.0", 
 
    "awesome-typescript-loader": "^3.0.4", 
 
    "copy-webpack-plugin": "^4.0.1", 
 
    "css-loader": "^0.26.1", 
 
    "extract-text-webpack-plugin": "2.0.0-beta.5", 
 
    "file-loader": "^0.9.0", 
 
    "html-loader": "^0.4.3", 
 
    "html-webpack-plugin": "^2.16.1", 
 
    "image-webpack-loader": "^3.3.0", 
 
    "jasmine": "~2.4.1", 
 
    "jasmine-core": "~2.4.1", 
 
    "karma": "^1.3.0", 
 
    "karma-chrome-launcher": "^2.0.0", 
 
    "karma-cli": "^1.0.1", 
 
    "karma-jasmine": "^1.0.2", 
 
    "karma-jasmine-html-reporter": "^0.2.2", 
 
    "karma-phantomjs-launcher": "^1.0.2", 
 
    "karma-sourcemap-loader": "^0.3.7", 
 
    "karma-webpack": "^2.0.1", 
 
    "lodash": "^4.16.2", 
 
    "null-loader": "^0.1.1", 
 
    "phantomjs-prebuilt": "^2.1.7", 
 
    "protractor": "~4.0.14", 
 
    "raw-loader": "^0.5.1", 
 
    "rimraf": "^2.5.4", 
 
    "style-loader": "^0.13.1", 
 
    "tslint": "^3.15.1", 
 
    "typescript": "~2.2.0", 
 
    "url-loader": "^0.5.8", 
 
    "webpack": "2.2.1", 
 
    "webpack-dev-server": "2.4.1", 
 
    "webpack-merge": "^3.0.0" 
 
    }, 
 
    "repository": {} 
 
}

我使用1563的登录和还增加canActivate

imports: [ BrowserModule, FormsModule, ReactiveFormsModule, RouterModule.forRoot([ {//route configs path: '', redirectTo: '/cfbsetup', pathMatch: 'full' }, { path: 'login', component: OktaComponent }, { path: 'cfbsetup', component: CFBSetupComponent, canActivate:[AuthGuard] },

进一步canActivate功能AuthGuard服务

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):Promise<boolean> { 
    let componentThis:AuthGuard = this; 
    let mypromise = new Promise(function(resolve, reject){ 
     componentThis.oktaService.isAuthenticated().then((e:any) => { 
      if (e) { 
       resolve (true); 
      } else { 
       componentThis.router.navigate(['/login']); 
       resolve(false); 
      } 
     }); 
    }); 

Now login redirects page to Okta login page which checks for active session `isAuthenticated():any { 
    let componentThis:any=this; 
    var mypromise = new Promise(function(resolve, reject){ 
     componentThis.oktaSignIn.session.get((response:any) => { 
     if (response.status !== 'INACTIVE') { 
     resolve(true); 
     } else { 
     resolve(false); 
     } 
     }) 
    }); 
    return mypromise 
    }; 

`

后,如果认证通过,从路线移除canActivate:[AuthGuard]我的默认路由得到正确加载,但我从AWS打电话给我的数据LAMBDA

getResponse(fnName:string, payload: any) :any { 

    let response:any; 

    AWS.config.update({region: this.config.IdentityPoolRegion}); 
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({IdentityPoolId: this.config.IdentityPoolId}); 

    let lambda: any= new AWS.Lambda({region: this.config.LambdaRegion, apiVersion: this.config.apiVersion}); 
    let lambdaSettings: any = { 
      FunctionName : this.config.FunctionName, 
      InvocationType : "RequestResponse", 
      LogType : "None", 
      Payload : JSON.stringify(payload) 
    }; 
    var mypromise = new Promise(function(resolve, reject){ 
     lambda.invoke(lambdaSettings, function(error:any, data:any) { 

      if (error) { 
       reject(response = error); 
      } else { 
       resolve(response = JSON.parse(data.Payload)); 
       console.log("response in service",response); 
      } 
     }); 
    }); 
    return mypromise; 
}; 

当我关闭登录我正确地从获取数据lambda函数,但与okta登录调用我的电话Lambda失败默默无误,没有任何错误,什么都没有

我检查网络选项卡在铬我怀疑zone.js是发起人的两个XHR电话,okta会话后aws lambda呼叫失败。不确定,但是它与websocket有关吗?我1563呼叫前注意到一个呼叫http://localhost:8080/sockjs-node/info?t

我检查了所有的承诺做工精细,用几个不同的版本zone.js的,检查没有发现任何东西..

感谢您的帮助..

回答

0

我认为你的AuthGuard服务需要一些工作。 canActive的方法签名应该返回一个布尔值,而不是一个包含在Promise中的布尔值。例如:

import { Injectable } from '@angular/core'; 
import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router'; 
import { OAuthService } from 'angular-oauth2-oidc'; 

@Injectable() 
export class AuthGuard implements CanActivate { 

    constructor(private oauthService: OAuthService, private router: Router) {} 

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { 
    if (this.oauthService.hasValidIdToken()) { 
     return true; 
    } 

    this.router.navigate(['/home']); 
    return false; 
    } 
} 

来源:http://developer.okta.com/blog/2017/04/17/angular-authentication-with-oidc#create-open-id-connect-app

0

改变zone.js的版本

"zone.js": "^0.8.4" 

其现在的工作..