feat: 修改模板,适配新的登录组件

This commit is contained in:
Pan Qiancheng 2025-12-31 17:48:21 +08:00
parent 570f6e8df5
commit 44288172f5
16 changed files with 46 additions and 345 deletions

View File

@ -11,6 +11,6 @@ declare namespace Download {
var onDownload: (data: ArrayBuffer | ReadableStream, filename: string) => Promise<void>;
var base64ToBlob: (base64String: string) => Blob;
var arrayBufferToBase64: (buffer: Buffer) => string;
var base64ToArrayBuffer: (base64String: string) => ArrayBufferLike;
var base64ToArrayBuffer: (base64String: string) => ArrayBuffer;
}
export default Download;

View File

@ -105,7 +105,6 @@ export default OakComponent({
}
},
inputChange(type, value) {
const { allowMobile, allowEmail } = this.props;
switch (type) {
case 'account':
// const validMobile = allowMobile && !!isMobile(value);

View File

@ -1,2 +1,2 @@
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "applicationPassport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthApplication", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthProvider", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUser", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUserAuthorization", import("../context/BackendRuntimeContext").BackendRuntimeContext<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "mobile", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "applicationPassport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthApplication", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthProvider", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUser", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUserAuthorization", import("../context/BackendRuntimeContext").BackendRuntimeContext<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "mobile", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
export default _default;

View File

@ -1,2 +1,2 @@
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "applicationPassport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthApplication", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthProvider", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUser", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUserAuthorization", import("../context/BackendRuntimeContext").BackendRuntimeContext<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "mobile", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "applicationPassport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthApplication", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthProvider", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUser", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUserAuthorization", import("../context/BackendRuntimeContext").BackendRuntimeContext<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "mobile", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
export default _default;

View File

@ -112,7 +112,6 @@ export default OakComponent({
}
},
inputChange(type: 'account' | 'password', value: string) {
const { allowMobile, allowEmail } = this.props;
switch (type) {
case 'account':
// const validMobile = allowMobile && !!isMobile(value);

View File

@ -1,62 +0,0 @@
import { EntityDict } from "@project/oak-app-domain";
import assert from "assert";
import { RowWithActions } from "oak-frontend-base";
import { Cache } from "@oak-frontend-base/features/cache";
import { generateNewId } from "oak-domain/lib/utils/uuid";
import { Token } from "@oak-general-business/features/token";
import { FeatureDict } from "@project/features";
export default OakComponent({
entity: 'oauthProvider',
isList: true,
projection: {
name: 1,
type: 1,
logo: 1,
authorizationEndpoint: 1,
redirectUri: 1,
clientId: 1,
},
filters: [{
filter() {
const application = this.features.application.getApplication();
return {
systemId: application?.systemId!,
ableState: "enabled",
};
},
}],
formData({ data }) {
return {
list: data,
};
},
data: {
loading: false
},
properties: {},
methods: {
onLogin(provider: RowWithActions<EntityDict, 'oauthProvider'>) {
this.setLoading(true);
const { name, type, redirectUri, clientId } = provider;
assert(redirectUri, 'Redirect URI is required for OAuth login');
assert(clientId, 'Client ID is required for OAuth login');
this.features.aspect.createOAuthState({
providerId: provider.id!,
type: "login",
userId: this.features.token.getUserId(true),
}).then(state => {
const target = `${provider.authorizationEndpoint}?response_type=code&client_id=${clientId}&redirect_uri=${encodeURIComponent(redirectUri!)}&state=${state}`;
// 跳转第三方认证页面
window.location.href = target;
})
console.log('Logging in with provider:', provider);
},
setLoading(loading: boolean) {
this.setState({ loading });
}
}
});

View File

@ -1,3 +0,0 @@
{
"waiting": "等待中..."
}

View File

@ -1,152 +0,0 @@
.providerContainer {
width: 100%;
margin-top: 24px;
padding: 20px 0;
}
.loadingWrapper {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 40px 0;
}
.loadingDots {
display: flex;
gap: 8px;
margin-bottom: 16px;
span {
width: 8px;
height: 8px;
border-radius: 50%;
background-color: #1890ff;
animation: loadingDot 1.4s infinite ease-in-out both;
&:nth-child(1) {
animation-delay: -0.32s;
}
&:nth-child(2) {
animation-delay: -0.16s;
}
}
}
@keyframes loadingDot {
0%, 80%, 100% {
transform: scale(0.6);
opacity: 0.3;
}
40% {
transform: scale(1);
opacity: 1;
}
}
.loadingText {
font-size: 14px;
color: rgba(0, 0, 0, 0.45);
}
.title {
font-size: 14px;
color: rgba(0, 0, 0, 0.45);
text-align: center;
margin-bottom: 24px;
position: relative;
&::before,
&::after {
content: '';
position: absolute;
top: 50%;
width: 30%;
height: 1px;
background-color: rgba(0, 0, 0, 0.1);
}
&::before {
left: 0;
}
&::after {
right: 0;
}
}
.providerList {
display: flex;
justify-content: center;
align-items: center;
gap: 32px;
flex-wrap: wrap;
}
.providerItem {
display: flex;
flex-direction: column;
align-items: center;
cursor: pointer;
transition: all 0.3s ease;
&:hover {
transform: translateY(-4px);
.logoWrapper {
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.15);
}
}
}
.logoWrapper {
width: 56px;
height: 56px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid #e8e8e8;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
overflow: hidden;
margin-bottom: 8px;
&:hover {
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.15);
}
}
.logo {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 50%;
}
.logoPlaceholder {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
font-weight: 600;
color: #fff;
}
.providerName {
font-size: 12px;
color: rgba(0, 0, 0, 0.65);
text-align: center;
max-width: 80px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
transition: color 0.3s ease;
.providerItem:hover & {
color: #1890ff;
}
}

View File

@ -1,77 +0,0 @@
import React from 'react';
import { EntityDict } from '@project/oak-app-domain';
import { RowWithActions, WebComponentProps } from 'oak-frontend-base';
import { Tooltip } from 'antd';
import Styles from './styles.module.less';
const ProviderList = (
props: WebComponentProps<
EntityDict,
'oauthProvider',
true,
{
list: RowWithActions<EntityDict, 'oauthProvider'>[];
loading: boolean;
},
{
onLogin: (provider: RowWithActions<EntityDict, 'oauthProvider'>) => void
}
>
) => {
const { list, loading } = props.data;
const { t, onLogin } = props.methods;
if (loading) {
return (
<div className={Styles.providerContainer}>
<div className={Styles.loadingWrapper}>
<div className={Styles.loadingDots}>
<span></span>
<span></span>
<span></span>
</div>
<div className={Styles.loadingText}>{t("waiting")}</div>
</div>
</div>
);
}
return (
<div className={Styles.providerContainer}>
{list && list.length > 0 && (
<>
<div className={Styles.title}></div>
<div className={Styles.providerList}>
{list.map((item) => {
return (
<Tooltip key={item.id} title={item.name} placement="bottom">
<div
className={Styles.providerItem}
onClick={() => onLogin(item)}
>
<div className={Styles.logoWrapper}>
{item.logo ? (
<img
src={item.logo}
alt={item.name}
className={Styles.logo}
/>
) : (
<div className={Styles.logoPlaceholder}>
{item.name?.charAt(0).toUpperCase()}
</div>
)}
</div>
<div className={Styles.providerName}>{item.name}</div>
</div>
</Tooltip>
);
})}
</div>
</>
)}
</div>
);
};
export default ProviderList;

View File

@ -1,6 +0,0 @@
export default OakComponent({
// Virtual Component
isList: false,
filters: [],
properties:{}
});

View File

@ -1,7 +0,0 @@
.id {
font-size: 18px;
}
.item {
font-size: 18px;
}

View File

@ -1,22 +0,0 @@
import React from 'react';
import { EntityDict } from '@project/oak-app-domain';
import { RowWithActions, WebComponentProps } from 'oak-frontend-base';
import Styles from './styles.module.less';
import ProviderList from './ProviderList';
const ByOauth = (
props: WebComponentProps<
EntityDict,
keyof EntityDict,
false,
{
// virtual
}
>
) => {
const { oakFullpath } = props.data;
return (<ProviderList oakPath={`oauthProviders:providers`}/>);
};
export default ByOauth;

View File

@ -1,3 +1,5 @@
import assert from "assert";
export default OakComponent({
formData({ features }) {
return {
@ -17,6 +19,35 @@ export default OakComponent({
methods: {
logout() {
return this.features.token.logout();
},
async goOauthLogin(providerId: string) {
const { data: [provider] } = await this.features.cache.refresh('oauthProvider', {
data: {
id: 1,
redirectUri: 1,
clientId: 1,
authorizationEndpoint: 1,
},
filter: {
id: providerId,
}
})
const { redirectUri, clientId, authorizationEndpoint } = provider;
assert(redirectUri, 'Redirect URI is required for OAuth login');
assert(clientId, 'Client ID is required for OAuth login');
this.features.aspect.createOAuthState({
providerId: provider.id!,
type: "login",
userId: this.features.token.getUserId(true),
}).then(state => {
const target = `${authorizationEndpoint}?response_type=code&client_id=${clientId}&redirect_uri=${encodeURIComponent(redirectUri!)}&state=${state}`;
console.log('OAuth login redirect target:', target);
// 跳转第三方认证页面
window.location.href = target;
})
console.log('Logging in with provider:', provider);
}
},
lifetimes: {

View File

@ -4,23 +4,23 @@ import { WebComponentProps } from 'oak-frontend-base';
import { Button, Result } from 'antd';
import { EntityDict } from '@project/oak-app-domain';
import Styles from './web.pc.module.less';
import ByOauth from '@project/components/login/byOauth';
export default function render(props: WebComponentProps<EntityDict, 'user', false, {
loggedIn: boolean;
}, {
logout: () => Promise<void>;
goOauthLogin: (providerId: string) => Promise<void>;
}>) {
const { loggedIn } = props.data;
const { t, logout } = props.methods;
const { t, logout, goOauthLogin } = props.methods;
if (!loggedIn) {
return (
<div className={Styles.login}>
<GeneralLogin
oakPath="$$general-login"
goOauthLogin={goOauthLogin}
/>
<ByOauth oakPath={`#login`} />
</div>
);
}

View File

@ -1,23 +1,27 @@
import React from 'react';
import { ErrorBlock, Button } from 'antd-mobile'
import GeneralLogin from 'oak-general-business/es/components/user/login';
import { WebComponentProps } from 'oak-frontend-base';
import { EntityDict } from '@project/oak-app-domain';
import Styles from './web.module.less';
import { Button, ErrorBlock } from 'antd-mobile';
export default function render(props: WebComponentProps<EntityDict, 'user', false, {
loggedIn: boolean;
}, {
logout: () => Promise<void>;
goOauthLogin: (providerId: string) => Promise<void>;
}>) {
const { loggedIn } = props.data;
const { t, logout } = props.methods;
const { t, logout, goOauthLogin } = props.methods;
if (!loggedIn) {
return (
<GeneralLogin
oakPath="$$general-login"
/>
<div className={Styles.login}>
<GeneralLogin
oakPath="$$general-login"
goOauthLogin={goOauthLogin}
/>
</div>
);
}