UNPKG

@ubuilder/auth

Version:

UBuilder Auth

89 lines (70 loc) 3.17 kB
# UBuilder Auth UBuilder Auth 8.x not compatible with version 7.x. * User authentication and autorization. Authorized request should use Auth.rest() (vue3) or this.$rest (vue2). ## Installation ``` npm i @ubuilder/auth ``` ## Usage ```javascript // vue 3 import { createApp } from 'vue'; import Auth from '@ubuilder/auth'; const app = createApp(...); const options = {/* plugin options */}; app.use(Auth, options); // vue 2 import Vue from 'vue'; import Auth from '@ubuilder/auth-vue2'; Vue.use(Auth, options); ``` ## Options * baseURL: string - Base URL for UBuilder auth server. Default value is '/api/auth'. * apiURL: string - Base URL for API server. Default value is '/'. If restOptions.baseURL exists, this option has no effect. * storageKey: string - LocalStorage key for current user. Default value is 'ubuilder:user'. * authPrefix: string - Prefix for provide and inject. Default value is '' (empty string). * onUserChanged: (user) => void - handler for user changed. * restOptions: RestOptions - options for rest call. When using multiple instance with authPrefix, must set X-UBAuth header to authPrefix value. ## Provides * auth: Auth - Auth API * rest: Rest API with authentication. * user: User - Current user * function onUserChanged((user) => unknown, authPrefix?: string) Using inject function. These functions always returns instance. When authPrefix instance not exists, returns no-op or anonymous. ```typescript import { useAuth, useRest, currentUser, onUserChanged } from '@ubuilder/auth'; const auth = useAuth(); const rest = useRest(); const user = currentUser(); onUserChanged((user) => { /* do with user changed */ }); ``` Using vanilla vue inject. ```typescript import type { Auth, Rest, User } from '@ubuilder/auth'; const auth = inject<Auth>('auth'); const rest = inject<Rest>('rest'); const user = inject<User>('user'); ``` Vue 2 options API. * $auth - Auth API * $rest - Rest API * $user - current User ### Auth API * login(username: string, password: string, remember?: boolean): Promise&lt;User&gt; - login process * login(request: LoginRequest): Promise&lt;User&gt; - login process with request. * logout(): Promise&lt;void&gt; - logout process * changePassword(oldPassword: string, newPassword: string): Promise&lt;void&gt; - change current user's password. After change password, all session will logout. * currentUser(): User - get current reactive user. If not logged in, returns anonymous user - check by isLoggedIn property. * rest(): Rest - get @ubuilder/rest API for authorized API request. * initialized(): Promise&lt;void&gt; - for waiting initial auth refresh. * refreshToken(): Promise&lt;void&gt; - refresh current user's token manually. ### User interface * token: string - Access token for UBuilder server. * expireAt: number - token expire time * sessionExpireAt: number - session expire time * authorities: string[] - array of authority. * details: Record&lt;string, unknown&gt; - UserDetails from UBuidler auth server. * isLoggedIn: boolean - determine user is logged in. * hasAuthority(authority?: string): boolean - determine user has authority. When needs track user changes, should use computed.