Я недавно инициализировал приложение Keystone, используя руководство здесь . Единственное, что я коснулся в коде, - это добавление в приложение Next.js внешнего интерфейса и изменение строки подключения mongodb, чтобы она указала на мой кластер MongoDB Atlas. Я развернул это приложение на Heroku, оно подключается к БД, и все прекрасно работает, но при попытке войти в систему после нажатия кнопки «Войти» кнопка отображает индикатор загрузки в течение секунды, а затем просто снова отображает страницу входа.
Я прочитал документы и попытался вставить
config: {
identityField: 'email',
secretField: 'password'
}
в мое определение authStrategy
, но безрезультатно. Действительно не уверен, куда еще идти отсюда.
Вот мое Keystone
определение:
const keystone = new Keystone({
name: PROJECT_NAME,
adapter: new Adapter({
mongoUri: 'mongodb+srv://stratus:WjbsENMyBV80AJ6H@cluster0-qe4bs.azure.mongodb.net/stratus?retryWrites=true&w=majority',
useNewUrlParser: true
}),
});
// Access control functions
const userIsAdmin = ({ authentication: { item: user } }) => Boolean(user && user.isAdmin);
const userOwnsItem = ({ authentication: { item: user } }) => {
if (!user) {
return false;
}
return { id: user.id };
};
const userIsAdminOrOwner = auth => {
const isAdmin = access.userIsAdmin(auth);
const isOwner = access.userOwnsItem(auth);
return isAdmin ? isAdmin : isOwner;
};
const access = { userIsAdmin, userOwnsItem, userIsAdminOrOwner };
keystone.createList('User', {
fields: {
name: { type: Text },
email: {
type: Text,
isUnique: true,
},
isAdmin: { type: Checkbox },
password: {
type: Password,
},
},
// To create an initial user you can temporarily remove access controls
access: {
read: access.userIsAdminOrOwner,
update: access.userIsAdminOrOwner,
create: access.userIsAdmin,
delete: access.userIsAdmin,
auth: true,
},
});
const authStrategy = keystone.createAuthStrategy({
type: PasswordAuthStrategy,
list: 'User',
config: {
identityField: 'email',
secretField: 'password'
}
});
module.exports = {
keystone,
apps: [
new GraphQLApp(),
// To create an initial user you can temporarily remove the authStrategy below
new AdminUIApp({ enableDefaultRoute: true, authStrategy }),
new NextApp({ dir: 'client'})
],
};
Я не вижу ошибок в своих журналах Heroku. Любая помощь очень ценится!