Я пытаюсь создать сервис аутентификации с помощью GraphQl и Mongodb.Я создал свою регистрационную мутацию, которая принимает адрес электронной почты и пароль.Я использую bcrypt для хеширования и разархивирования паролей.
Это не проблема импорта или проблема mongodb, это graphql.
const UserType = new GraphQLObjectType({
name: 'User',
fields: () => ({
id: {type: GraphQLID},
username: {type: GraphQLString},
email: {type: GraphQLString},
password: {type: GraphQLString},
institution: {
type: InstitutionType,
resolve(parent, args){
return Institution.findById(parent.institutionId)
}
}
})
});
login:{
type:GraphQLString,
args:{
email: {type: GraphQLString},
password: {type: GraphQLString}
},
resolve: async (parent, { email, password }, { models, SECRET }) => {
const user = await models.User.findOne({ where: { email } });
if (!user) {
throw new Error('No user with that email');
}
const valid = await bcrypt.compare(password, user.password);
if (!valid) {
throw new Error('Incorrect password');
}
const token = jwt.sign(
{
user: _.pick(user, ['id', 'username']),
},
SECRET,
{
expiresIn: '1y',
},
);
return token;
},
},
}});
Он должен вернуть токен jwt, который может позжеиспользоваться для аутентификации.Сначала я запустил это в graphiql в своем браузере:
mutation{
login(email: "ammarthayani@gmail.com", password:"password"){
}
}
, и он выдал мне это в консоли: «Синтаксическая ошибка: ожидаемое имя найдено
Затем я попытался:
mutation{
login(email: "ammarthayani@gmail.com", password:"password"){
username
}
}
, который дал мне: Поле \ "логин \" не должно иметь выбор, так как тип \ "Строка \" не имеет подполей.