2021-03-25 14:59:44 +01:00
|
|
|
'use strict';
|
|
|
|
|
2021-09-08 16:16:16 +02:00
|
|
|
const adminAuthStrategy = {
|
|
|
|
name: 'admin',
|
|
|
|
async authenticate(ctx) {
|
|
|
|
const { authorization } = ctx.request.header;
|
2021-09-06 15:04:59 +02:00
|
|
|
|
2021-09-08 16:16:16 +02:00
|
|
|
if (!authorization) {
|
|
|
|
return { authenticated: false };
|
|
|
|
}
|
|
|
|
|
|
|
|
const parts = authorization.split(/\s+/);
|
|
|
|
|
|
|
|
if (parts[0] !== 'Bearer' || parts.length !== 2) {
|
|
|
|
return { authenticated: false };
|
|
|
|
}
|
|
|
|
|
|
|
|
const token = parts[1];
|
2021-09-06 15:04:59 +02:00
|
|
|
const { payload, isValid } = strapi.admin.services.token.decodeJwtToken(token);
|
|
|
|
|
|
|
|
if (isValid) {
|
2021-09-08 16:16:16 +02:00
|
|
|
const user = await strapi
|
2021-09-06 15:04:59 +02:00
|
|
|
.query('admin::user')
|
|
|
|
.findOne({ where: { id: payload.id }, populate: ['roles'] });
|
|
|
|
|
2021-09-08 16:16:16 +02:00
|
|
|
if (!user || !(user.isActive === true)) {
|
|
|
|
return { error: 'Invalid credentials' };
|
2021-09-06 15:04:59 +02:00
|
|
|
}
|
|
|
|
|
2021-09-08 16:16:16 +02:00
|
|
|
const userAbility = await strapi.admin.services.permission.engine.generateUserAbility(user);
|
2021-09-06 15:04:59 +02:00
|
|
|
|
2021-09-08 16:16:16 +02:00
|
|
|
ctx.state.userAbility = userAbility;
|
|
|
|
ctx.state.user = user;
|
2021-09-22 18:49:04 +02:00
|
|
|
ctx.state.isAuthenticatedAdmin = true;
|
2021-09-06 15:04:59 +02:00
|
|
|
|
2021-09-08 16:16:16 +02:00
|
|
|
return { authenticated: true, credentials: user };
|
2021-09-06 15:04:59 +02:00
|
|
|
}
|
|
|
|
|
2021-09-08 16:16:16 +02:00
|
|
|
return { error: 'Invalid credentials' };
|
|
|
|
},
|
2021-09-06 15:04:59 +02:00
|
|
|
};
|
|
|
|
|
2021-03-25 14:59:44 +01:00
|
|
|
module.exports = () => {
|
2021-09-06 15:04:59 +02:00
|
|
|
const passportMiddleware = strapi.admin.services.passport.init();
|
|
|
|
|
|
|
|
strapi.server.api('admin').use(passportMiddleware);
|
2021-09-08 16:16:16 +02:00
|
|
|
strapi.container.get('auth').register('admin', adminAuthStrategy);
|
2021-03-25 14:59:44 +01:00
|
|
|
};
|