Я сделал это в одном из своих приложений, в основном вам просто нужен пользовательский интерфейс, этот возвращает ноль при первом корневом запросе, если никто не вошел в систему, и вы можете затем обновить его с помощью мутации входа в систему, передавая учетные данные. Основная проблема заключается в том, чтобы получить файлы cookie или сеанс внутри запроса ретрансляции сообщений, поскольку он не обрабатывает поле файла cookie в запросе.
Вот моя клиентская мутация:
export default class LoginMutation extends Relay.Mutation {
static fragments = {
user: () => Relay.QL`
fragment on User {
id,
mail
}
`,
};
getMutation() {
return Relay.QL`mutation{Login}`;
}
getVariables() {
return {
mail: this.props.credentials.pseudo,
password: this.props.credentials.password,
};
}
getConfigs() {
return [{
type: 'FIELDS_CHANGE',
fieldIDs: {
user: this.props.user.id,
}
}];
}
getOptimisticResponse() {
return {
mail: this.props.credentials.pseudo,
};
}
getFatQuery() {
return Relay.QL`
fragment on LoginPayload {
user {
userID,
mail
}
}
`;
}
}
и вот моя побочная мутация схемы
var LoginMutation = mutationWithClientMutationId({
name: 'Login',
inputFields: {
mail: {
type: new GraphQLNonNull(GraphQLString)
},
password: {
type: new GraphQLNonNull(GraphQLString)
}
},
outputFields: {
user: {
type: GraphQLUser,
resolve: (newUser) => newUser
}
},
mutateAndGetPayload: (credentials, {
rootValue
}) => co(function*() {
var newUser = yield getUserByCredentials(credentials, rootValue);
console.log('schema:loginmutation');
delete newUser.id;
return newUser;
})
});
чтобы мои пользователи регистрировались через обновление страницы, я отправляю свой собственный запрос и заполняю его полем cookie... На данный момент это единственный способ заставить его работать...
person
Duduche
schedule
10.10.2015