gpt4 book ai didi

angular - 使用 Auth0 spa 快速入门时出错

转载 作者:太空狗 更新时间:2023-10-29 17:25:07 27 4
gpt4 key购买 nike

我目前正在开发一个 Angular 2 网络应用程序,它将使用 Auth0 进行用户身份验证。

我关注了 quickstart在 Auth0 网站上,但我收到错误 Cannot read property 'WebAuth' of undefined at new AuthService (auth.service.ts:9),即使已声明 AuthService。

我错过了什么吗?非常感谢任何帮助。

这是我的代码

//app.component.ts

import { Component } from '@angular/core';
import { AuthService } from '../../auth/auth.service';

@Component({
selector: 'app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {

constructor(public auth: AuthService) {
auth.handleAuthentication();
}
}

//auth.service.ts

import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import 'rxjs/add/operator/filter';
import auth0 from 'auth0-js';

@Injectable()
export class AuthService {

auth0 = new auth0.WebAuth({
clientID: '*****',
domain: '*****',
responseType: 'token id_token',
audience: '******',
redirectUri: 'http://localhost:4200/callback',
scope: 'openid'
});

constructor(public router: Router) { }

public login(): void {
this.auth0.authorize();
}

public handleAuthentication(): void {
this.auth0.parseHash((err, authResult) => {
if (authResult && authResult.accessToken && authResult.idToken) {
window.location.hash = '';
this.setSession(authResult);
this.router.navigate(['/home']);
} else if (err) {
this.router.navigate(['/home']);
console.log(err);
}
});
}

private setSession(authResult): void {
// Set the time that the access token will expire at
const expiresAt = JSON.stringify((authResult.expiresIn * 1000) + new Date().getTime());
localStorage.setItem('access_token', authResult.accessToken);
localStorage.setItem('id_token', authResult.idToken);
localStorage.setItem('expires_at', expiresAt);
}

public logout(): void {
// Remove tokens and expiry time from localStorage
localStorage.removeItem('access_token');
localStorage.removeItem('id_token');
localStorage.removeItem('expires_at');
// Go back to the home route
this.router.navigate(['/']);
}

public isAuthenticated(): boolean {
// Check whether the current time is past the
// access token's expiry time
const expiresAt = JSON.parse(localStorage.getItem('expires_at'));
if (new Date().getTime() < expiresAt) {
return true;
} else {
return false;
}
}

}

//app.html

<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header" *ngIf="auth" >
<a class="navbar-brand" href="#">Auth0 - Angular</a>

<button class="btn btn-primary btn-margin"
routerLink="/">
Home
</button>

<button class="btn btn-primary btn-margin"
*ngIf="!auth.isAuthenticated()"
(click)="auth.login()">
Log In
</button>

<button class="btn btn-primary btn-margin"
*ngIf="auth.isAuthenticated()"
(click)="auth.logout()">
Log Out
</button>

</div>
</div>
</nav>

<main class="container">
<router-outlet></router-outlet>
</main>

谢谢

最佳答案

你试过这样导入吗:

从 'auth0-js' 导入 * 作为 auth0;

关于angular - 使用 Auth0 spa 快速入门时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44159197/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com