Zrobiłem to w jednej z moich aplikacji, po prostu potrzebujesz interfejsu użytkownika, ten zwraca zero na pierwszym zapytaniu głównym, jeśli nikt nie jest zalogowany, a następnie możesz go zaktualizować mutacją logowania przechodzącą w dane uwierzytelniające . Głównym problemem jest pobranie plików cookie lub sesji wewnątrz żądania przekazywania postu, ponieważ nie obsługuje ono pola cookie w żądaniu.
Oto moja mutacja klient:
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
}
}
`;
}
}
i tu jest mój schemat boczny mutacja
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;
})
});
aby moje użytkowników zalogowanych poprzez odświeżenie strony mogę wysłać moje własne żądanie i wypełnić go z cookie pole ... To na razie jedyny sposób, żeby to zadziałało ...
Dzięki, spróbuję jutro. Czy załączasz "Wysyłam własne żądanie i wypełniam je polem cookie" w funkcji getUserByCredentials? – Seneca
tak naprawdę to jest problem z przekaźnikiem, nie masz dostępu do plików cookie w ramach żądania postu. Czekam, aż mutacja zwróci stronę klienta, a ja wyślę zupełnie nowe domowe żądanie pobierania z poświadczeniami, aby wypełnić mój plik cookie ..., a następnie odśwież, wyślij identyfikator użytkownika za pomocą html i w kwerendzie głównej przekazujesz ten identyfikator użytkownika. – Duduche
W przypadku braku funkcji resetowania (która [obecnie nie ma przekaźnika] (https://github.com/facebook/relay/issues/233)), zrobienie tego za pośrednictwem samego przekaźnika prawdopodobnie nie jest dobrym pomysłem. Ponieważ Relay buforuje dane GraphQL wewnętrznie, a dane mogą być specyficzne dla użytkownika, potrzebny jest sposób unieważnienia tej pamięci podręcznej przy wylogowaniu _ lub _ login. W tej chwili zalecamy, aby ludzie odświeżali całą stronę, gdy wystąpi jedno z tych zdarzeń. – wincent