mirror of
https://github.com/casdoor/casdoor.git
synced 2025-05-23 02:35:49 +08:00
feat: make MFA works for CAS login (#2506)
* feat: make MFA works for CAS login * fix: Reduced code redundancy * fix: Modified the format of the code. * fix: fix an error with the 'res' variable * Update LoginPage.js * Update LoginPage.js * Update LoginPage.js * Update MfaAuthVerifyForm.js --------- Co-authored-by: hsluoyz <hsluoyz@qq.com>
This commit is contained in:
parent
1a91e7b0f9
commit
23f4684e1d
@ -337,7 +337,7 @@ class LoginPage extends React.Component {
|
|||||||
const casParams = Util.getCasParameters();
|
const casParams = Util.getCasParameters();
|
||||||
values["type"] = this.state.type;
|
values["type"] = this.state.type;
|
||||||
AuthBackend.loginCas(values, casParams).then((res) => {
|
AuthBackend.loginCas(values, casParams).then((res) => {
|
||||||
if (res.status === "ok") {
|
const loginHandler = (res) => {
|
||||||
let msg = "Logged in successfully. ";
|
let msg = "Logged in successfully. ";
|
||||||
if (casParams.service === "") {
|
if (casParams.service === "") {
|
||||||
// If service was not specified, Casdoor must display a message notifying the client that it has successfully initiated a single sign-on session.
|
// If service was not specified, Casdoor must display a message notifying the client that it has successfully initiated a single sign-on session.
|
||||||
@ -351,6 +351,28 @@ class LoginPage extends React.Component {
|
|||||||
newUrl.searchParams.append("ticket", st);
|
newUrl.searchParams.append("ticket", st);
|
||||||
window.location.href = newUrl.toString();
|
window.location.href = newUrl.toString();
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (res.status === "ok") {
|
||||||
|
if (res.data === NextMfa) {
|
||||||
|
this.setState({
|
||||||
|
getVerifyTotp: () => {
|
||||||
|
return (
|
||||||
|
<MfaAuthVerifyForm
|
||||||
|
mfaProps={res.data2}
|
||||||
|
formValues={values}
|
||||||
|
authParams={casParams}
|
||||||
|
application={this.getApplicationObj()}
|
||||||
|
onFail={() => {
|
||||||
|
Setting.showMessage("error", i18next.t("mfa:Verification failed"));
|
||||||
|
}}
|
||||||
|
onSuccess={(res) => loginHandler(res)}
|
||||||
|
/>);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
loginHandler(res);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Setting.showMessage("error", `${i18next.t("application:Failed to sign in")}: ${res.msg}`);
|
Setting.showMessage("error", `${i18next.t("application:Failed to sign in")}: ${res.msg}`);
|
||||||
}
|
}
|
||||||
@ -361,7 +383,7 @@ class LoginPage extends React.Component {
|
|||||||
this.populateOauthValues(values);
|
this.populateOauthValues(values);
|
||||||
AuthBackend.login(values, oAuthParams)
|
AuthBackend.login(values, oAuthParams)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
const callback = (res) => {
|
const loginHandler = (res) => {
|
||||||
const responseType = values["type"];
|
const responseType = values["type"];
|
||||||
|
|
||||||
if (responseType === "login") {
|
if (responseType === "login") {
|
||||||
@ -396,12 +418,12 @@ class LoginPage extends React.Component {
|
|||||||
<MfaAuthVerifyForm
|
<MfaAuthVerifyForm
|
||||||
mfaProps={res.data2}
|
mfaProps={res.data2}
|
||||||
formValues={values}
|
formValues={values}
|
||||||
oAuthParams={oAuthParams}
|
authParams={oAuthParams}
|
||||||
application={this.getApplicationObj()}
|
application={this.getApplicationObj()}
|
||||||
onFail={() => {
|
onFail={() => {
|
||||||
Setting.showMessage("error", i18next.t("mfa:Verification failed"));
|
Setting.showMessage("error", i18next.t("mfa:Verification failed"));
|
||||||
}}
|
}}
|
||||||
onSuccess={(res) => callback(res)}
|
onSuccess={(res) => loginHandler(res)}
|
||||||
/>);
|
/>);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@ -414,7 +436,7 @@ class LoginPage extends React.Component {
|
|||||||
const sub = res.data2;
|
const sub = res.data2;
|
||||||
Setting.goToLink(`/buy-plan/${sub.owner}/${sub.pricing}/result?subscription=${sub.name}`);
|
Setting.goToLink(`/buy-plan/${sub.owner}/${sub.pricing}/result?subscription=${sub.name}`);
|
||||||
} else {
|
} else {
|
||||||
callback(res);
|
loginHandler(res);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Setting.showMessage("error", `${i18next.t("application:Failed to sign in")}: ${res.msg}`);
|
Setting.showMessage("error", `${i18next.t("application:Failed to sign in")}: ${res.msg}`);
|
||||||
|
@ -24,7 +24,7 @@ import MfaVerifyTotpForm from "./MfaVerifyTotpForm";
|
|||||||
export const NextMfa = "NextMfa";
|
export const NextMfa = "NextMfa";
|
||||||
export const RequiredMfa = "RequiredMfa";
|
export const RequiredMfa = "RequiredMfa";
|
||||||
|
|
||||||
export function MfaAuthVerifyForm({formValues, oAuthParams, mfaProps, application, onSuccess, onFail}) {
|
export function MfaAuthVerifyForm({formValues, authParams, mfaProps, application, onSuccess, onFail}) {
|
||||||
formValues.password = "";
|
formValues.password = "";
|
||||||
formValues.username = "";
|
formValues.username = "";
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
@ -34,7 +34,8 @@ export function MfaAuthVerifyForm({formValues, oAuthParams, mfaProps, applicatio
|
|||||||
const verify = ({passcode}) => {
|
const verify = ({passcode}) => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
const values = {...formValues, passcode, mfaType};
|
const values = {...formValues, passcode, mfaType};
|
||||||
AuthBackend.login(values, oAuthParams).then((res) => {
|
const loginFunction = formValues.type === "cas" ? AuthBackend.loginCas : AuthBackend.login;
|
||||||
|
loginFunction(values, authParams).then((res) => {
|
||||||
if (res.status === "ok") {
|
if (res.status === "ok") {
|
||||||
onSuccess(res);
|
onSuccess(res);
|
||||||
} else {
|
} else {
|
||||||
@ -49,7 +50,9 @@ export function MfaAuthVerifyForm({formValues, oAuthParams, mfaProps, applicatio
|
|||||||
|
|
||||||
const recover = () => {
|
const recover = () => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
AuthBackend.login({...formValues, recoveryCode}, oAuthParams).then(res => {
|
const values = {...formValues, recoveryCode};
|
||||||
|
const loginFunction = formValues.type === "cas" ? AuthBackend.loginCas : AuthBackend.login;
|
||||||
|
loginFunction(values, authParams).then((res) => {
|
||||||
if (res.status === "ok") {
|
if (res.status === "ok") {
|
||||||
onSuccess(res);
|
onSuccess(res);
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user