Using the guide from https://developer.okta.com/code/angular/okta_angular_auth_js/
I can login and my access token populates after logging in.
But isAuthenticated doesn’t seem to be doing anything.
app.service.ts
export class OktaAuthService {
oktaAuth = new OktaAuth({
url: 'someurl',
clientId: 'somekey',
issuer: 'someissuer',
redirectUri: 'http://127.0.0.1:8081/callback',
pkce: true
});
debug() {
console.log(this.oktaAuth.tokenManager.get('accessToken'));
}
constructor(private router: Router) {}
async isAuthenticated() {
// Checks if there is a current accessToken in the TokenManger.
return !!(await this.oktaAuth.tokenManager.get('accessToken'));
}
login() {
// Launches the login redirect.
this.oktaAuth.token.getWithRedirect({
scopes: ['openid', 'email', 'profile']
});
}
async handleAuthentication() {
const tokens = await this.oktaAuth.token.parseFromUrl();
tokens.forEach(token => {
if (token.idToken) {
this.oktaAuth.tokenManager.add('idToken', token);
}
if (token.accessToken) {
this.oktaAuth.tokenManager.add('accessToken', token);
}
});
}
async logout() {
console.log(this.oktaAuth.tokenManager.get('accessToken'));
this.oktaAuth.tokenManager.clear();
await this.oktaAuth.signOut();
}
With this html, I see the icon, not the login button.
layout.component.html
<li><button *ngIf="!oktaAuth.isAuthenticated()" (click)="oktaAuth.login()"> Login </button></li>
<li *ngIf="oktaAuth.isAuthenticated" class="nav-item dropdown" dropdown placement="bottom right">
<a class="nav-link" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" dropdownToggle (click)="false">
<img src="assets/img/avatars/6.jpg" class="img-avatar" alt="admin@bootstrapmaster.com"/>
</a>
<div class="dropdown-menu dropdown-menu-right" *dropdownMenu aria-labelledby="simple-dropdown">
<a (click)="oktaAuth.logout()" class="dropdown-item" href="#"><i class="fa fa-lock"></i> Logout</a>
</div>
With this html, I see the login button, not the icon.
layout.component.html
<li><button *ngIf="oktaAuth.isAuthenticated()" (click)="oktaAuth.login()"> Login </button></li>
<li *ngIf="!oktaAuth.isAuthenticated" class="nav-item dropdown" dropdown placement="bottom right">
<a class="nav-link" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" dropdownToggle (click)="false">
<img src="assets/img/avatars/6.jpg" class="img-avatar" alt="admin@bootstrapmaster.com"/>
</a>
<div class="dropdown-menu dropdown-menu-right" *dropdownMenu aria-labelledby="simple-dropdown">
<a (click)="oktaAuth.logout()" class="dropdown-item" href="#"><i class="fa fa-lock"></i> Logout</a>
</div>
Using the second html, I can login with redirect and the access token is captured. The buttons don’t change and oktaGuard never protects my routes. I can see the value change when there’s a access key
With accessToken
1. ZoneAwarePromise {__zone_symbol__state: null, __zone_symbol__value: Array(0)}
1. Symbol(Symbol.toStringTag): (...)
2. __zone_symbol__state: true
3. __zone_symbol__value: true
4. __proto__: Object
Without access token
1. ZoneAwarePromise {__zone_symbol__state: null, __zone_symbol__value: Array(0)}
1. Symbol(Symbol.toStringTag): (...)
2. __zone_symbol__state: true
3. __zone_symbol__value: false
4. __proto__: Object
Also after the key is stored, it never redirects from http://127.0.0.1:8081/callback
Any help would be greatly appreciated.