feat: add OAuth 2.0 web ui and its process functions

- update common.js
- update AuthLogin.js
- update config.js
This commit is contained in:
OnEvent 2024-08-08 18:22:29 +08:00
parent c9d20f3616
commit 6be2658e9b
No known key found for this signature in database
GPG Key ID: 3CDB9068A32B4927
3 changed files with 45 additions and 3 deletions

View File

@ -22,7 +22,11 @@ const config = {
turnstile_site_key: '', turnstile_site_key: '',
version: '', version: '',
wechat_login: false, wechat_login: false,
wechat_qrcode: '' wechat_qrcode: '',
oauth2: false,
oauth2_app_id: '',
oauth2_authorization_endpoint: '',
oauth2_token_endpoint: '',
} }
}; };

View File

@ -98,6 +98,21 @@ export async function onLarkOAuthClicked(lark_client_id) {
window.open(`https://open.feishu.cn/open-apis/authen/v1/index?redirect_uri=${redirect_uri}&app_id=${lark_client_id}&state=${state}`); window.open(`https://open.feishu.cn/open-apis/authen/v1/index?redirect_uri=${redirect_uri}&app_id=${lark_client_id}&state=${state}`);
} }
export async function onOAuth2Clicked(auth_url, client_id, openInNewTab = false) {
const state = await getOAuthState();
if (!state) return;
const redirect_uri = `${window.location.origin}/oauth/oidc`;
const response_type = "code";
const scope = "profile email";
const url = `${auth_url}?client_id=${client_id}&redirect_uri=${redirect_uri}&response_type=${response_type}&scope=${scope}&state=${state}`;
if (openInNewTab) {
window.open(url);
} else
{
window.location.href = url;
}
}
export function isAdmin() { export function isAdmin() {
let user = localStorage.getItem('user'); let user = localStorage.getItem('user');
if (!user) return false; if (!user) return false;

View File

@ -36,7 +36,7 @@ import VisibilityOff from '@mui/icons-material/VisibilityOff';
import Github from 'assets/images/icons/github.svg'; import Github from 'assets/images/icons/github.svg';
import Wechat from 'assets/images/icons/wechat.svg'; import Wechat from 'assets/images/icons/wechat.svg';
import Lark from 'assets/images/icons/lark.svg'; import Lark from 'assets/images/icons/lark.svg';
import { onGitHubOAuthClicked, onLarkOAuthClicked } from 'utils/common'; import { onGitHubOAuthClicked, onLarkOAuthClicked, onOAuth2Clicked } from 'utils/common';
// ============================|| FIREBASE - LOGIN ||============================ // // ============================|| FIREBASE - LOGIN ||============================ //
@ -50,7 +50,7 @@ const LoginForm = ({ ...others }) => {
// const [checked, setChecked] = useState(true); // const [checked, setChecked] = useState(true);
let tripartiteLogin = false; let tripartiteLogin = false;
if (siteInfo.github_oauth || siteInfo.wechat_login || siteInfo.lark_client_id) { if (siteInfo.github_oauth || siteInfo.wechat_login || siteInfo.lark_client_id || siteInfo.oauth2) {
tripartiteLogin = true; tripartiteLogin = true;
} }
@ -145,6 +145,29 @@ const LoginForm = ({ ...others }) => {
</AnimateButton> </AnimateButton>
</Grid> </Grid>
)} )}
{siteInfo.oauth2 && (
<Grid item xs={12}>
<AnimateButton>
<Button
disableElevation
fullWidth
onClick={() => onOAuth2Clicked(siteInfo.oauth2_authorization_endpoint,siteInfo.oauth2_app_id)}
size="large"
variant="outlined"
sx={{
color: 'grey.700',
backgroundColor: theme.palette.grey[50],
borderColor: theme.palette.grey[100]
}}
>
<Box sx={{ mr: { xs: 1, sm: 2, width: 20 }, display: 'flex', alignItems: 'center' }}>
<img src={Wechat} alt="Lark" width={25} height={25} style={{ marginRight: matchDownSM ? 8 : 16 }} />
</Box>
使用 OAuth 2.0 登录
</Button>
</AnimateButton>
</Grid>
)}
<Grid item xs={12}> <Grid item xs={12}>
<Box <Box
sx={{ sx={{