mirror of
https://github.com/casdoor/casdoor.git
synced 2025-05-24 08:20:31 +08:00
Add innerParams.
This commit is contained in:
parent
55b62e9786
commit
26502350d3
@ -12,8 +12,6 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
import {trim} from "./Util";
|
|
||||||
|
|
||||||
export let authConfig = {
|
export let authConfig = {
|
||||||
serverUrl: "http://example.com", // your Casdoor URL, like the official one: https://door.casbin.com
|
serverUrl: "http://example.com", // your Casdoor URL, like the official one: https://door.casbin.com
|
||||||
appName: "app-example", // your Casdoor application name, like: "app-built-in"
|
appName: "app-example", // your Casdoor application name, like: "app-built-in"
|
||||||
@ -23,11 +21,3 @@ export let authConfig = {
|
|||||||
export function initAuthWithConfig(config) {
|
export function initAuthWithConfig(config) {
|
||||||
authConfig = config;
|
authConfig = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getMyProfileUrl() {
|
|
||||||
return `${trim(authConfig.serverUrl)}/account`
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getUserProfileUrl(userName) {
|
|
||||||
return `${trim(authConfig.serverUrl)}/users/${authConfig.organizationName}/${userName}`;
|
|
||||||
}
|
|
||||||
|
@ -30,14 +30,20 @@ class AuthCallback extends React.Component {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getInnerParams() {
|
||||||
|
// For example, for Casbin-OA, realRedirectUri = "http://localhost:9000/login"
|
||||||
|
// realRedirectUrl = "http://localhost:9000"
|
||||||
|
const params = new URLSearchParams(this.props.location.search);
|
||||||
|
const state = params.get("state");
|
||||||
|
return new URLSearchParams(Util.stateToGetQueryParams(state));
|
||||||
|
}
|
||||||
|
|
||||||
getResponseType() {
|
getResponseType() {
|
||||||
// "http://localhost:8000"
|
// "http://localhost:8000"
|
||||||
const authServerUrl = authConfig.serverUrl;
|
const authServerUrl = authConfig.serverUrl;
|
||||||
|
|
||||||
// For example, for Casbin-OA, realRedirectUri = "http://localhost:9000/login"
|
const innerParams = this.getInnerParams();
|
||||||
// realRedirectUrl = "http://localhost:9000"
|
const realRedirectUri = innerParams.get("redirect_uri");
|
||||||
const params = new URLSearchParams(this.props.location.search);
|
|
||||||
const realRedirectUri = params.get("redirect_uri");
|
|
||||||
const realRedirectUrl = new URL(realRedirectUri).origin;
|
const realRedirectUrl = new URL(realRedirectUri).origin;
|
||||||
|
|
||||||
// For Casdoor itself, we use "login" directly
|
// For Casdoor itself, we use "login" directly
|
||||||
@ -50,17 +56,18 @@ class AuthCallback extends React.Component {
|
|||||||
|
|
||||||
componentWillMount() {
|
componentWillMount() {
|
||||||
const params = new URLSearchParams(this.props.location.search);
|
const params = new URLSearchParams(this.props.location.search);
|
||||||
|
const innerParams = this.getInnerParams();
|
||||||
let redirectUri = `${window.location.origin}/callback/${this.state.applicationName}/${this.state.providerName}/${this.state.method}`;
|
let redirectUri = `${window.location.origin}/callback/${this.state.applicationName}/${this.state.providerName}/${this.state.method}`;
|
||||||
const body = {
|
const body = {
|
||||||
type: this.getResponseType(),
|
type: this.getResponseType(),
|
||||||
application: this.state.applicationName,
|
application: this.state.applicationName,
|
||||||
provider: this.state.providerName,
|
provider: this.state.providerName,
|
||||||
code: params.get("code"),
|
code: params.get("code"),
|
||||||
state: params.get("state"),
|
state: innerParams.get("state"),
|
||||||
redirectUri: redirectUri,
|
redirectUri: redirectUri,
|
||||||
method: this.state.method,
|
method: this.state.method,
|
||||||
};
|
};
|
||||||
const oAuthParams = Util.getOAuthGetParameters();
|
const oAuthParams = Util.getOAuthGetParameters(innerParams);
|
||||||
AuthBackend.login(body, oAuthParams)
|
AuthBackend.login(body, oAuthParams)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
if (res.status === 'ok') {
|
if (res.status === 'ok') {
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
const AuthState = "casdoor";
|
import * as Util from "./Util";
|
||||||
|
|
||||||
const GoogleAuthScope = "profile+email"
|
const GoogleAuthScope = "profile+email"
|
||||||
const GoogleAuthUri = "https://accounts.google.com/signin/oauth";
|
const GoogleAuthUri = "https://accounts.google.com/signin/oauth";
|
||||||
@ -43,14 +43,15 @@ export function getAuthLogo(provider) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getAuthUrl(application, provider, method) {
|
export function getAuthUrl(application, provider, method) {
|
||||||
const redirectUri = `${window.location.origin}/callback/${application.name}/${provider.name}/${method}${encodeURIComponent(window.location.search)}`;
|
const redirectUri = `${window.location.origin}/callback/${application.name}/${provider.name}/${method}`;
|
||||||
|
const state = Util.getQueryParamsToState();
|
||||||
if (provider.type === "google") {
|
if (provider.type === "google") {
|
||||||
return `${GoogleAuthUri}?client_id=${provider.clientId}&redirect_uri=${redirectUri}&scope=${GoogleAuthScope}&response_type=code&state=${AuthState}`;
|
return `${GoogleAuthUri}?client_id=${provider.clientId}&redirect_uri=${redirectUri}&scope=${GoogleAuthScope}&response_type=code&state=${state}`;
|
||||||
} else if (provider.type === "github") {
|
} else if (provider.type === "github") {
|
||||||
return `${GithubAuthUri}?client_id=${provider.clientId}&redirect_uri=${redirectUri}&scope=${GithubAuthScope}&response_type=code&state=${AuthState}`;
|
return `${GithubAuthUri}?client_id=${provider.clientId}&redirect_uri=${redirectUri}&scope=${GithubAuthScope}&response_type=code&state=${state}`;
|
||||||
} else if (provider.type === "qq") {
|
} else if (provider.type === "qq") {
|
||||||
return `${QqAuthUri}?client_id=${provider.clientId}&redirect_uri=${redirectUri}&scope=${QqAuthScope}&response_type=code&state=${AuthState}`;
|
return `${QqAuthUri}?client_id=${provider.clientId}&redirect_uri=${redirectUri}&scope=${QqAuthScope}&response_type=code&state=${state}`;
|
||||||
} else if (provider.type === "wechat") {
|
} else if (provider.type === "wechat") {
|
||||||
return `${WeChatAuthUri}?appid=${provider.clientId}&redirect_uri=${redirectUri}&scope=${WeChatAuthScope}&response_type=code&state=${AuthState}#wechat_redirect`;
|
return `${WeChatAuthUri}?appid=${provider.clientId}&redirect_uri=${redirectUri}&scope=${WeChatAuthScope}&response_type=code&state=${state}#wechat_redirect`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,8 +43,8 @@ export function trim(str, ch) {
|
|||||||
return (start > 0 || end < str.length) ? str.substring(start, end) : str;
|
return (start > 0 || end < str.length) ? str.substring(start, end) : str;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getOAuthGetParameters() {
|
export function getOAuthGetParameters(params) {
|
||||||
const queries = new URLSearchParams(window.location.search);
|
const queries = (params !== undefined) ? params : new URLSearchParams(window.location.search);
|
||||||
const clientId = queries.get("client_id");
|
const clientId = queries.get("client_id");
|
||||||
const responseType = queries.get("response_type");
|
const responseType = queries.get("response_type");
|
||||||
const redirectUri = queries.get("redirect_uri");
|
const redirectUri = queries.get("redirect_uri");
|
||||||
@ -62,3 +62,12 @@ export function getOAuthGetParameters() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getQueryParamsToState() {
|
||||||
|
const query = window.location.search;
|
||||||
|
return btoa(query);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function stateToGetQueryParams(state) {
|
||||||
|
return atob(state);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user