RuoYi
Casdoor можна легко інтегрувати з RuoYi-cloud.
Крок 1: Розгортання Casdoor
Deploy Casdoor. See Server installation. Ensure the server is running (e.g. http://localhost:8000) and you can open the login page (e.g. http://localhost:7001) and sign in with admin / 123.
Крок 2: Налаштування Casdoor
Налаштуйте організацію, додаток та Синхронізатор у Casdoor. Notes:
- When editing the syncer, check the table columns:
. - When editing the organization, select the correct password type:
.
- Enable soft deletion.
Крок 3. Реформуйте ваш фронтенд
3.1 Перехід на сторінку входу Casdoor
Use a frontend SDK (e.g. vue-sdk). After initializing it, get the Casdoor login URL with getSigninUrl().
Wire the link as needed and remove any redundant RuoYi-Cloud login UI (e.g. account/password inputs).
3.2 Прийміть код і стан, повернуті Casdoor
Після успішного входу через Casdoor, Casdoor надсилає код і стан на сторінку, яку ми налаштували. Ми можемо отримати код і стан, використовуючи функцію create().
created() {
let url = window.document.location.href; // get URL
let u = new URL(url);
this.loginForm.code = u.searchParams.get('code'); // get code and state
this.loginForm.state = u.searchParams.get('state');
if (this.loginForm.code != null && this.loginForm.state != null) { // if code and state are not null, execute handleLogin
this.handleLogin();
}
}
Для RuoYi-Cloud ми просто змінюємо його оригінальний метод відправлення облікового запису та пароля на відправлення коду і стану замість цього. Отже, зміна полягає лише в тому, що відправляється на бекенд, у відношенні до оригінального входу.
Крок 4: Рефакторинг вашого бекенду
4.1 Прийміть код і стан, повернуті фронтендом
@PostMapping("login")
public R<?> callback(@RequestBody CodeBody code) {
String token = casdoorAuthService.getOAuthToken(code.getCode(), code.getState());
CasdoorUser casdoorUser = casdoorAuthService.parseJwtToken(token);
if (casdoorUser.getName() != null) {
String casdoorUserName = casdoorUser.getName();
if (sysLoginService.getUserByCasdoorName(casdoorUserName) == null) {
sysLoginService.casdoorRegister(casdoorUserName); // Add this user to the database if they don't exist
}
}
LoginUser userInfo = sysLoginService.casdoorLogin(casdoorUser.getName()); // Get the user's information from the database
return R.ok(tokenService.createToken(userInfo));
}
У цьому методі ми використовуємо метод casdoor-SpringBoot-sdk і робимо невеликі зміни до методу RuoYi-Cloud.
Наприклад, оригінальний метод RuoYi-Cloud реєструє обліковий запис з паролем. Я змінив його на реєстрацію облікового запису за допомогою методу casdoorRegister.
Я також додав метод getUserByCasdoorName, щоб перевірити, чи існує обліковий запис, і змінив метод executeUserInfo на executeWithAccount, щоб відобразити цю зміну.
Це легка зміна, оскільки нам просто потрібно видалити частину, яка перевіряє пароль.
Крок 5: Підсумок
5.1 Фронтенд
- Потрібно видалити існуючі сторінки входу та реєстрації.
- Крім того, фронтенд повинен приймати параметри коду та стану та відправляти їх на бекенд.
5.2 Бекенд
Бекенд RuoYi вже має добре реалізовану функцію входу та реєстрації. Нам просто потрібно зробити деякі невеликі зміни, що робить процес надзвичайно зручним.