جاوااسکریپت - الکترون جیاس: جلوگیری از ناوبری به یک مسیر مشخص
وقتی از loadURL برای بارگذاری وبسایتم استفاده میکنم، میخواهم از رفتن کاربران به دو صفحه جلوگیری کنم. نیاز دارم این کار را در داخل اپلیکیشن Electron انجام دهم.
برای مثال، در برنامه خود من در:
https://WebsiteApp.com
اما من میخواهم از هدایت به صفحه جلوگیری کنم:
https://WebsiteApp.com/security
آیا راهی وجود دارد که از پیمایش این مسیر جلوگیری کرد؟
pathname: '/security'
پاسخ شماره ۱
سعی کنید از «Route Guards» استفاده کنید، که همچنین به عنوان Navigation Guards شناخته میشود و در برخی فریمورکها مانند Angular یا Vue پیادهسازی شده است، در آن صورت React از React router و hooks برای انجام این کار استفاده میکند از جمله TypeScript.
به هر حال این توضیح را بررسی کنید که در آن میتوانید صفحه را بسته به سطح دسترسی و موارد دیگر هدایت کنید، این توضیح طولانی است اما ممکن است به شما کمک کند.
این پیادهسازی AuthGuard انتظار دارد یک نمونه داخلی از
AuthorizationServiceایجاد کند تا دسترسی را از طریق تابعpageEnabledاعتبارسنجی کند.
// auth-guard.ts
import { Commands, Context, RedirectResult } from '@vaadin/router';
import { AuthorizationService } from './authorization-service';
import { PageEnabled } from './page-enabled';
export class AuthGuard implements PageEnabled {
private authService: AuthorizationService;
constructor() {
this.authService = new AuthorizationService();
}
public async pageEnabled(context: Context, commands: Commands, pathRedirect?: string): Promise<RedirectResult | undefined> {
const isAuthenticated = await this.authService.isAuthorized();
if(!isAuthenticated) {
console.warn('User not authorized', context.pathname);
return commands.redirect(pathRedirect? pathRedirect: '/');
}
return undefined;
}
}
همچنین، این کلاس باید رابط PageEnabled را که در /shared/auth/page-enabled.ts تعریف شده است پیادهسازی کند
//page-enabled.ts
import { Commands, Context, RedirectResult } from '@vaadin/router';
export interface PageEnabled {
pageEnabled(
context: Context,
commands: Commands,
pathRedirect?: string
): Promise<RedirectResult | undefined>;
}
