Adjustment of sample code without

We made an adjustment to the documentation because with the example we couldn't make it work.
Following the steps we put in the current example works perfectly. @padupe @monnylly @ericksposito

Signed-off-by: Erick Sposito <erick.sposito@madeiramadeira.com.br>
This commit is contained in:
Erick Sposito
2022-07-15 15:01:38 -03:00
committed by GitHub
parent b473f8f8fe
commit 2cd2145a17
+50 -36
View File
@@ -273,46 +273,60 @@ that the user belongs to using the user access token in the provided result obje
```ts
// File: packages/backend/src/plugins/auth.ts
import { DEFAULT_NAMESPACE, stringifyEntityRef, } from '@backstage/catalog-model';
import {
createRouter,
defaultAuthProviderFactories,
providers,
} from '@backstage/plugin-auth-backend';
import { Router } from 'express';
import { PluginEnvironment } from '../types';
import {
stringifyEntityRef,
DEFAULT_NAMESPACE,
} from '@backstage/catalog-model';
export default async function createPlugin(
// ...
return await createRouter({
// ...
env: PluginEnvironment,
): Promise<Router> {
return createRouter({
...env,
providerFactories: {
// ...
google: async ({ profile }, ctx) => {
if (!profile.email) {
throw new Error(
'Login failed, user profile does not contain an email',
);
}
// Split the email into the local part and the domain.
const [localPart, domain] = profile.email.split('@');
// Next we verify the email domain. It is recommended to include this
// kind of check if you don't look up the user in an external service.
if (domain !== 'acme.org') {
throw new Error('Login failed, user email domain check failed');
}
// By using `stringifyEntityRef` we ensure that the reference is formatted correctly
const userEntityRef = stringifyEntityRef({
kind: 'User',
name: localPart,
namespace: DEFAULT_NAMESPACE,
});
return ctx.issueToken({
claims: {
sub: userEntityRef,
ent: [userEntityRef],
...defaultAuthProviderFactories,
google: providers.google.create({
signIn: {
resolver: async ({ profile }, ctx) => {
if (!profile.email) {
throw new Error('Login Failed');
}
// Split the email into the local part and the domain.
const [localPart, domain] = profile.email.split('@');
// Next we verify the email domain. It is recommended to include this
// kind of check if you don't look up the user in an external service.
if (domain !== 'acme.org') {
throw new Error(
`Login failed, this email ${profile.email} does not belong to the expected domain`,
);
}
// By using `stringifyEntityRef` we ensure that the reference is formatted correctly
const userEntity = stringifyEntityRef({
kind: 'User',
name: localPart,
namespace: DEFAULT_NAMESPACE,
});
return ctx.issueToken({
claims: {
sub: userEntity,
ent: [userEntity],
},
});
},
});
},
}
})
)
},
}),
},
});
}
```
## AuthHandler