11 changed files with 143 additions and 84 deletions
@ -1,2 +1,2 @@ |
|||||
export * as tokenApi from './token'; |
export { useTokenApi } from './useTokenApi'; |
||||
export * as userInfoApi from './user'; |
export { useUserInfoApi } from './useUserInfoApi'; |
||||
|
|||||
@ -1,46 +0,0 @@ |
|||||
import type { |
|
||||
OAuthTokenResult, |
|
||||
PasswordTokenRequestModel, |
|
||||
TokenResult, |
|
||||
} from '../types'; |
|
||||
|
|
||||
import { useAppConfig } from '@vben/hooks'; |
|
||||
|
|
||||
import { requestClient } from '@abp/request'; |
|
||||
|
|
||||
/** |
|
||||
* 用户登录 |
|
||||
* @param request 参数 |
|
||||
* @returns 用户token |
|
||||
*/ |
|
||||
export async function loginApi( |
|
||||
request: PasswordTokenRequestModel, |
|
||||
): Promise<TokenResult> { |
|
||||
const { clientId, clientSecret } = useAppConfig( |
|
||||
import.meta.env, |
|
||||
import.meta.env.PROD, |
|
||||
); |
|
||||
const result = await requestClient.post<OAuthTokenResult>( |
|
||||
'/connect/token', |
|
||||
{ |
|
||||
client_id: clientId, |
|
||||
client_secret: clientSecret, |
|
||||
grant_type: 'password', |
|
||||
password: request.password, |
|
||||
scope: |
|
||||
'openid email address phone profile offline_access lingyun-abp-application', |
|
||||
username: request.username, |
|
||||
}, |
|
||||
{ |
|
||||
headers: { |
|
||||
'Content-Type': 'application/x-www-form-urlencoded', |
|
||||
}, |
|
||||
}, |
|
||||
); |
|
||||
return { |
|
||||
accessToken: result.access_token, |
|
||||
expiresIn: result.expires_in, |
|
||||
refreshToken: result.refresh_token, |
|
||||
tokenType: result.token_type, |
|
||||
}; |
|
||||
} |
|
||||
@ -0,0 +1,84 @@ |
|||||
|
import type { |
||||
|
OAuthTokenRefreshModel, |
||||
|
OAuthTokenResult, |
||||
|
PasswordTokenRequestModel, |
||||
|
TokenResult, |
||||
|
} from '../types'; |
||||
|
|
||||
|
import { useAppConfig } from '@vben/hooks'; |
||||
|
|
||||
|
import { useRequest } from '@abp/request'; |
||||
|
|
||||
|
export function useTokenApi() { |
||||
|
const { cancel, request } = useRequest(); |
||||
|
/** |
||||
|
* 用户登录 |
||||
|
* @param input 参数 |
||||
|
* @returns 用户token |
||||
|
*/ |
||||
|
async function loginApi( |
||||
|
input: PasswordTokenRequestModel, |
||||
|
): Promise<TokenResult> { |
||||
|
const { audience, clientId, clientSecret } = useAppConfig( |
||||
|
import.meta.env, |
||||
|
import.meta.env.PROD, |
||||
|
); |
||||
|
const result = await request<OAuthTokenResult>('/connect/token', { |
||||
|
data: { |
||||
|
client_id: clientId, |
||||
|
client_secret: clientSecret, |
||||
|
grant_type: 'password', |
||||
|
password: input.password, |
||||
|
scope: audience, |
||||
|
username: input.username, |
||||
|
}, |
||||
|
headers: { |
||||
|
'Content-Type': 'application/x-www-form-urlencoded', |
||||
|
}, |
||||
|
method: 'POST', |
||||
|
}); |
||||
|
return { |
||||
|
accessToken: result.access_token, |
||||
|
expiresIn: result.expires_in, |
||||
|
refreshToken: result.refresh_token, |
||||
|
tokenType: result.token_type, |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 刷新令牌 |
||||
|
* @param input 参数 |
||||
|
* @returns 用户token |
||||
|
*/ |
||||
|
async function refreshTokenApi(input: OAuthTokenRefreshModel) { |
||||
|
const { audience, clientId, clientSecret } = useAppConfig( |
||||
|
import.meta.env, |
||||
|
import.meta.env.PROD, |
||||
|
); |
||||
|
const result = await request<OAuthTokenResult>('/connect/token', { |
||||
|
data: { |
||||
|
client_id: clientId, |
||||
|
client_secret: clientSecret, |
||||
|
grant_type: 'refresh_token', |
||||
|
refresh_token: input.refreshToken, |
||||
|
scope: audience, |
||||
|
}, |
||||
|
headers: { |
||||
|
'Content-Type': 'application/x-www-form-urlencoded', |
||||
|
}, |
||||
|
method: 'POST', |
||||
|
}); |
||||
|
return { |
||||
|
accessToken: result.access_token, |
||||
|
expiresIn: result.expires_in, |
||||
|
refreshToken: result.refresh_token, |
||||
|
tokenType: result.token_type, |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
return { |
||||
|
cancel, |
||||
|
loginApi, |
||||
|
refreshTokenApi, |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,29 @@ |
|||||
|
import type { OAuthUserInfo, UserInfo } from '../types/user'; |
||||
|
|
||||
|
import { useRequest } from '@abp/request'; |
||||
|
|
||||
|
export function useUserInfoApi() { |
||||
|
const { cancel, request } = useRequest(); |
||||
|
|
||||
|
/** |
||||
|
* 获取用户信息 |
||||
|
*/ |
||||
|
async function getUserInfoApi(): Promise<UserInfo> { |
||||
|
const result = await request<OAuthUserInfo>('/connect/userinfo', { |
||||
|
method: 'GET', |
||||
|
}); |
||||
|
return { |
||||
|
...result, |
||||
|
emailVerified: result.email_verified, |
||||
|
givenName: result.given_name, |
||||
|
phoneNumberVerified: result.phone_number_verified, |
||||
|
preferredUsername: result.preferred_username, |
||||
|
uniqueName: result.unique_name, |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
return { |
||||
|
cancel, |
||||
|
getUserInfoApi, |
||||
|
}; |
||||
|
} |
||||
@ -1,18 +0,0 @@ |
|||||
import type { OAuthUserInfo, UserInfo } from '../types/user'; |
|
||||
|
|
||||
import { requestClient } from '@abp/request'; |
|
||||
|
|
||||
/** |
|
||||
* 获取用户信息 |
|
||||
*/ |
|
||||
export async function getUserInfoApi(): Promise<UserInfo> { |
|
||||
const result = await requestClient.get<OAuthUserInfo>('/connect/userinfo'); |
|
||||
return { |
|
||||
...result, |
|
||||
emailVerified: result.email_verified, |
|
||||
givenName: result.given_name, |
|
||||
phoneNumberVerified: result.phone_number_verified, |
|
||||
preferredUsername: result.preferred_username, |
|
||||
uniqueName: result.unique_name, |
|
||||
}; |
|
||||
} |
|
||||
Loading…
Reference in new issue