Skip to content

Commit

Permalink
Bind all methods of Auth0VueClient to this (#110)
Browse files Browse the repository at this point in the history
* Bind all methods of Auth0VueClient to this

* revert change

* Rework binding plugin methods
  • Loading branch information
frederikprijck authored May 2, 2022
1 parent 119bf62 commit b162876
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
9 changes: 7 additions & 2 deletions src/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import {
RedirectLoginResult,
User
} from '@auth0/auth0-spa-js';
import { bindPluginMethods } from './utils';

/**
* @ignore
Expand All @@ -48,7 +49,11 @@ export class Auth0Plugin implements Auth0VueClient {
constructor(
private clientOptions: Auth0VueClientOptions,
private pluginOptions?: Auth0PluginOptions
) {}
) {
// Vue Plugins can have issues when passing around the instance to `provide`
// Therefor we need to bind all methods correctly to `this`.
bindPluginMethods(this, ['constructor']);
}

install(app: App) {
this._client = new Auth0Client({
Expand Down Expand Up @@ -148,7 +153,7 @@ export class Auth0Plugin implements Auth0VueClient {
}
}

async __refreshState() {
private async __refreshState() {
this._isAuthenticated.value = await this._client.isAuthenticated();
this._user.value = await this._client.getUser();
this._idTokenClaims.value = await this._client.getIdTokenClaims();
Expand Down
10 changes: 10 additions & 0 deletions src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,13 @@ export function watchEffectOnce<T>(watcher: () => T, fn: Function) {
}
});
}

/**
* @ignore
* Helper function to bind methods to itself, useful when using Vue's `provide` / `inject` API's.
*/
export function bindPluginMethods(plugin: any, exclude: string[]) {
Object.getOwnPropertyNames(Object.getPrototypeOf(plugin))
.filter(method => !exclude.includes(method))
.forEach(method => (plugin[method] = plugin[method].bind(plugin)));
}

0 comments on commit b162876

Please sign in to comment.