Перейти до основного вмісту

Приклад Electron додатку для Casdoor

Приклад Electron додатку, який демонструє можливості інтеграції Casdoor.

Як запустити приклад

Ініціалізація

Вам потрібно ініціалізувати 6 параметрів, всі вони мають тип рядка:

НазваОписШлях
serverUrlURL вашого сервера Casdoorsrc/App.js
clientIdClient ID вашого застосунку Casdoorsrc/App.js
appNameНазва вашого застосунку Casdoorsrc/App.js
redirectPathШлях URL перенаправлення для вашого застосунку Casdoor, буде /callback, якщо не наданоsrc/App.js
clientSecretClient Secret вашого застосунку Casdoorsrc/App.js
casdoorServiceDomainURL вашого сервера Casdoorpublic/electron.js

Якщо ви не встановите ці параметри, цей проект буде використовувати Casdoor онлайн демо як сервер Casdoor за замовчуванням і використовувати Casnode як застосунок Casdoor за замовчуванням.

Доступні команди

У директорії проекту ви можете запустити:

npm run dev або yarn dev

Збирає Electron додаток і запускає цей додаток.

npm run make або yarn make

Пакує та розповсюджує ваш застосунок. Це створить папку out, де буде розташований ваш пакет:

// Example for macOS out/  
├── out/make/zip/darwin/x64/casdoor-electron-example-darwin-x64-1.0.0.zip
├── ...
└── out/casdoor-electron-example-darwin-x64/casdoor-electron-example.app/Contents/MacOS/casdoor-electron-example

Перегляд

Як тільки ви запустите цей Electron додаток, на вашому робочому столі з'явиться нове вікно. Electron LoginЯкщо ви натиснете кнопку Login with Casdoor, ваш браузер за замовчуванням автоматично відкриється і покаже сторінку входу. Browser ViewПісля успішного входу ваш Electron додаток відкриється, і ваше ім'я користувача буде відображено у вашому застосунку. Electron LogoutВи можете переглянути весь процес у gif зображенні нижче. Electron Preview Gif

Кроки інтеграції

Встановіть користувацький протокол

Спочатку вам потрібно встановити користувацький протокол під назвою casdoor.

const protocol = "casdoor";

if (process.defaultApp) {
if (process.argv.length >= 2) {
app.setAsDefaultProtocolClient(protocol, process.execPath, [
path.resolve(process.argv[1]),
]);
}
} else {
app.setAsDefaultProtocolClient(protocol);
}

Це дозволить браузеру відкрити ваш Electron додаток і надіслати інформацію про вхід до Electron додатку.

Відкрийте URL входу у браузері

const serverUrl = "https://door.casdoor.com";
const appName = "app-casnode";
const redirectPath = "/callback";
const clientId = "014ae4bd048734ca2dea";
const clientSecret = "f26a4115725867b7bb7b668c81e1f8f7fae1544d";

const redirectUrl = "casdoor://localhost:3000" + redirectPath;

const signinUrl = `${serverUrl}/login/oauth/authorize?client_id=${clientId}&response_type=code&redirect_uri=${encodeURIComponent(redirectUrl)}&scope=profile&state=${appName}&noRedirect=true`;

shell.openExternal(signinUrl); //Open the login url in the browser

Ви можете змінити перші п'ять параметрів.

Слухайте подію відкриття програми

Як тільки ви успішно увійдете через браузер, браузер відкриє ваш Electron додаток. Тому вам потрібно слухати подію відкриття додатку.

const gotTheLock = app.requestSingleInstanceLock();
const ProtocolRegExp = new RegExp(`^${protocol}://`);

if (!gotTheLock) {
app.quit();
} else {
app.on("second-instance", (event, commandLine, workingDirectory) => {
if (mainWindow) {
if (mainWindow.isMinimized()) mainWindow.restore();
mainWindow.focus();
commandLine.forEach((str) => {
if (ProtocolRegExp.test(str)) {
const params = url.parse(str, true).query;
if (params && params.code) {
store.set("casdoor_code", params.code);
mainWindow.webContents.send("receiveCode", params.code);
}
}
});
}
});
app.whenReady().then(createWindow);

app.on("open-url", (event, openUrl) => {
const isProtocol = ProtocolRegExp.test(openUrl);
if (isProtocol) {
const params = url.parse(openUrl, true).query;
if (params && params.code) {
store.set("casdoor_code", params.code);
mainWindow.webContents.send("receiveCode", params.code);
}
}
});
}

Ви можете отримати код з браузера, який є casdoor_code або params.code.

Розберіть код і отримайте інформацію про користувача

async function getUserInfo(clientId, clientSecret, code) {
const { data } = await axios({
method: "post",
url: authCodeUrl,
headers: {
"content-type": "application/json",
},
data: JSON.stringify({
grant_type: "authorization_code",
client_id: clientId,
client_secret: clientSecret,
code: code,
}),
});
const resp = await axios({
method: "get",
url: `${getUserInfoUrl}?accessToken=${data.access_token}`,
});
return resp.data;
}

ipcMain.handle("getUserInfo", async (event, clientId, clientSecret) => {
const code = store.get("casdoor_code");
const userInfo = await getUserInfo(clientId, clientSecret, code);
store.set("userInfo", userInfo);
return userInfo;
});

Нарешті, ви можете розібрати код і отримати інформацію про користувача, слідуючи сторінці документації OAuth.