0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2024-12-16 20:26:19 -05:00

feat: add /sign-in/abort api, close #32

This commit is contained in:
Gao Sun 2021-07-06 23:47:14 +08:00
parent 9befa9c5f6
commit 0356010ee3
No known key found for this signature in database
GPG key ID: 0F0EFA2E36639F31
2 changed files with 16 additions and 2 deletions

View file

@ -4,15 +4,20 @@ export enum GuardErrorCode {
InvalidInput = 'guard.invalid_input', InvalidInput = 'guard.invalid_input',
} }
export enum OidcErrorCode {
Aborted = 'oidc.aborted',
}
export enum RegisterErrorCode { export enum RegisterErrorCode {
UsernameExists = 'register.username_exists', UsernameExists = 'register.username_exists',
} }
export type RequestErrorCode = GuardErrorCode | RegisterErrorCode; export type RequestErrorCode = GuardErrorCode | OidcErrorCode | RegisterErrorCode;
const requestErrorMessage: Record<RequestErrorCode, string> = { const requestErrorMessage: Record<RequestErrorCode, string> = {
[RegisterErrorCode.UsernameExists]: 'The username already exists.',
[GuardErrorCode.InvalidInput]: 'The request input is invalid.', [GuardErrorCode.InvalidInput]: 'The request input is invalid.',
[OidcErrorCode.Aborted]: 'The end-user aborted interaction.',
[RegisterErrorCode.UsernameExists]: 'The username already exists.',
}; };
export type RequestErrorMetadata = { export type RequestErrorMetadata = {

View file

@ -6,6 +6,7 @@ import { findUserById } from '@/queries/user';
import { Provider } from 'oidc-provider'; import { Provider } from 'oidc-provider';
import { conditional } from '@logto/essentials'; import { conditional } from '@logto/essentials';
import koaGuard from '@/middleware/koa-guard'; import koaGuard from '@/middleware/koa-guard';
import { OidcErrorCode } from '@/errors/RequestError';
export default function createSignInRoutes(provider: Provider) { export default function createSignInRoutes(provider: Provider) {
const router = new Router(); const router = new Router();
@ -82,5 +83,13 @@ export default function createSignInRoutes(provider: Provider) {
ctx.body = { redirectTo }; ctx.body = { redirectTo };
}); });
router.post('/sign-in/abort', async (ctx) => {
await provider.interactionDetails(ctx.req, ctx.res);
const redirectTo = await provider.interactionResult(ctx.req, ctx.res, {
error: OidcErrorCode.Aborted,
});
ctx.body = { redirectTo };
});
return router.routes(); return router.routes();
} }