Merge pull request #2396 from seefs001/fix/login
fix: Try to fix login error "already logged in" issue
This commit is contained in:
@@ -294,7 +294,7 @@ const LoginForm = () => {
|
|||||||
setGithubButtonDisabled(true);
|
setGithubButtonDisabled(true);
|
||||||
}, 20000);
|
}, 20000);
|
||||||
try {
|
try {
|
||||||
onGitHubOAuthClicked(status.github_client_id);
|
onGitHubOAuthClicked(status.github_client_id, { shouldLogout: true });
|
||||||
} finally {
|
} finally {
|
||||||
// 由于重定向,这里不会执行到,但为了完整性添加
|
// 由于重定向,这里不会执行到,但为了完整性添加
|
||||||
setTimeout(() => setGithubLoading(false), 3000);
|
setTimeout(() => setGithubLoading(false), 3000);
|
||||||
@@ -309,7 +309,7 @@ const LoginForm = () => {
|
|||||||
}
|
}
|
||||||
setDiscordLoading(true);
|
setDiscordLoading(true);
|
||||||
try {
|
try {
|
||||||
onDiscordOAuthClicked(status.discord_client_id);
|
onDiscordOAuthClicked(status.discord_client_id, { shouldLogout: true });
|
||||||
} finally {
|
} finally {
|
||||||
// 由于重定向,这里不会执行到,但为了完整性添加
|
// 由于重定向,这里不会执行到,但为了完整性添加
|
||||||
setTimeout(() => setDiscordLoading(false), 3000);
|
setTimeout(() => setDiscordLoading(false), 3000);
|
||||||
@@ -324,7 +324,12 @@ const LoginForm = () => {
|
|||||||
}
|
}
|
||||||
setOidcLoading(true);
|
setOidcLoading(true);
|
||||||
try {
|
try {
|
||||||
onOIDCClicked(status.oidc_authorization_endpoint, status.oidc_client_id);
|
onOIDCClicked(
|
||||||
|
status.oidc_authorization_endpoint,
|
||||||
|
status.oidc_client_id,
|
||||||
|
false,
|
||||||
|
{ shouldLogout: true },
|
||||||
|
);
|
||||||
} finally {
|
} finally {
|
||||||
// 由于重定向,这里不会执行到,但为了完整性添加
|
// 由于重定向,这里不会执行到,但为了完整性添加
|
||||||
setTimeout(() => setOidcLoading(false), 3000);
|
setTimeout(() => setOidcLoading(false), 3000);
|
||||||
@@ -339,7 +344,7 @@ const LoginForm = () => {
|
|||||||
}
|
}
|
||||||
setLinuxdoLoading(true);
|
setLinuxdoLoading(true);
|
||||||
try {
|
try {
|
||||||
onLinuxDOOAuthClicked(status.linuxdo_client_id);
|
onLinuxDOOAuthClicked(status.linuxdo_client_id, { shouldLogout: true });
|
||||||
} finally {
|
} finally {
|
||||||
// 由于重定向,这里不会执行到,但为了完整性添加
|
// 由于重定向,这里不会执行到,但为了完整性添加
|
||||||
setTimeout(() => setLinuxdoLoading(false), 3000);
|
setTimeout(() => setLinuxdoLoading(false), 3000);
|
||||||
|
|||||||
@@ -261,7 +261,7 @@ const RegisterForm = () => {
|
|||||||
setGithubButtonDisabled(true);
|
setGithubButtonDisabled(true);
|
||||||
}, 20000);
|
}, 20000);
|
||||||
try {
|
try {
|
||||||
onGitHubOAuthClicked(status.github_client_id);
|
onGitHubOAuthClicked(status.github_client_id, { shouldLogout: true });
|
||||||
} finally {
|
} finally {
|
||||||
setTimeout(() => setGithubLoading(false), 3000);
|
setTimeout(() => setGithubLoading(false), 3000);
|
||||||
}
|
}
|
||||||
@@ -270,7 +270,7 @@ const RegisterForm = () => {
|
|||||||
const handleDiscordClick = () => {
|
const handleDiscordClick = () => {
|
||||||
setDiscordLoading(true);
|
setDiscordLoading(true);
|
||||||
try {
|
try {
|
||||||
onDiscordOAuthClicked(status.discord_client_id);
|
onDiscordOAuthClicked(status.discord_client_id, { shouldLogout: true });
|
||||||
} finally {
|
} finally {
|
||||||
setTimeout(() => setDiscordLoading(false), 3000);
|
setTimeout(() => setDiscordLoading(false), 3000);
|
||||||
}
|
}
|
||||||
@@ -279,7 +279,12 @@ const RegisterForm = () => {
|
|||||||
const handleOIDCClick = () => {
|
const handleOIDCClick = () => {
|
||||||
setOidcLoading(true);
|
setOidcLoading(true);
|
||||||
try {
|
try {
|
||||||
onOIDCClicked(status.oidc_authorization_endpoint, status.oidc_client_id);
|
onOIDCClicked(
|
||||||
|
status.oidc_authorization_endpoint,
|
||||||
|
status.oidc_client_id,
|
||||||
|
false,
|
||||||
|
{ shouldLogout: true },
|
||||||
|
);
|
||||||
} finally {
|
} finally {
|
||||||
setTimeout(() => setOidcLoading(false), 3000);
|
setTimeout(() => setOidcLoading(false), 3000);
|
||||||
}
|
}
|
||||||
@@ -288,7 +293,7 @@ const RegisterForm = () => {
|
|||||||
const handleLinuxDOClick = () => {
|
const handleLinuxDOClick = () => {
|
||||||
setLinuxdoLoading(true);
|
setLinuxdoLoading(true);
|
||||||
try {
|
try {
|
||||||
onLinuxDOOAuthClicked(status.linuxdo_client_id);
|
onLinuxDOOAuthClicked(status.linuxdo_client_id, { shouldLogout: true });
|
||||||
} finally {
|
} finally {
|
||||||
setTimeout(() => setLinuxdoLoading(false), 3000);
|
setTimeout(() => setLinuxdoLoading(false), 3000);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -231,8 +231,22 @@ export async function getOAuthState() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function onDiscordOAuthClicked(client_id) {
|
async function prepareOAuthState(options = {}) {
|
||||||
const state = await getOAuthState();
|
const { shouldLogout = false } = options;
|
||||||
|
if (shouldLogout) {
|
||||||
|
try {
|
||||||
|
await API.get('/api/user/logout', { skipErrorHandler: true });
|
||||||
|
} catch (err) {
|
||||||
|
|
||||||
|
}
|
||||||
|
localStorage.removeItem('user');
|
||||||
|
updateAPI();
|
||||||
|
}
|
||||||
|
return await getOAuthState();
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function onDiscordOAuthClicked(client_id, options = {}) {
|
||||||
|
const state = await prepareOAuthState(options);
|
||||||
if (!state) return;
|
if (!state) return;
|
||||||
const redirect_uri = `${window.location.origin}/oauth/discord`;
|
const redirect_uri = `${window.location.origin}/oauth/discord`;
|
||||||
const response_type = 'code';
|
const response_type = 'code';
|
||||||
@@ -242,8 +256,13 @@ export async function onDiscordOAuthClicked(client_id) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function onOIDCClicked(auth_url, client_id, openInNewTab = false) {
|
export async function onOIDCClicked(
|
||||||
const state = await getOAuthState();
|
auth_url,
|
||||||
|
client_id,
|
||||||
|
openInNewTab = false,
|
||||||
|
options = {},
|
||||||
|
) {
|
||||||
|
const state = await prepareOAuthState(options);
|
||||||
if (!state) return;
|
if (!state) return;
|
||||||
const url = new URL(auth_url);
|
const url = new URL(auth_url);
|
||||||
url.searchParams.set('client_id', client_id);
|
url.searchParams.set('client_id', client_id);
|
||||||
@@ -258,16 +277,19 @@ export async function onOIDCClicked(auth_url, client_id, openInNewTab = false) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function onGitHubOAuthClicked(github_client_id) {
|
export async function onGitHubOAuthClicked(github_client_id, options = {}) {
|
||||||
const state = await getOAuthState();
|
const state = await prepareOAuthState(options);
|
||||||
if (!state) return;
|
if (!state) return;
|
||||||
window.open(
|
window.open(
|
||||||
`https://github.com/login/oauth/authorize?client_id=${github_client_id}&state=${state}&scope=user:email`,
|
`https://github.com/login/oauth/authorize?client_id=${github_client_id}&state=${state}&scope=user:email`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function onLinuxDOOAuthClicked(linuxdo_client_id) {
|
export async function onLinuxDOOAuthClicked(
|
||||||
const state = await getOAuthState();
|
linuxdo_client_id,
|
||||||
|
options = { shouldLogout: false },
|
||||||
|
) {
|
||||||
|
const state = await prepareOAuthState(options);
|
||||||
if (!state) return;
|
if (!state) return;
|
||||||
window.open(
|
window.open(
|
||||||
`https://connect.linux.do/oauth2/authorize?response_type=code&client_id=${linuxdo_client_id}&state=${state}`,
|
`https://connect.linux.do/oauth2/authorize?response_type=code&client_id=${linuxdo_client_id}&state=${state}`,
|
||||||
|
|||||||
Reference in New Issue
Block a user