Relayjs Graphql用户身份验证
是否可以通过graphql服务器结合relay&react对具有不同角色的用户进行身份验证 我环顾四周,找不到关于这个话题的太多信息Relayjs Graphql用户身份验证,graphql,relayjs,Graphql,Relayjs,是否可以通过graphql服务器结合relay&react对具有不同角色的用户进行身份验证 我环顾四周,找不到关于这个话题的太多信息 在我当前的设置中,具有不同角色的登录功能仍然通过传统的RESTAPI运行。。。('secured'带有json web令牌)。我在我的一个应用程序中这样做了,基本上你只需要一个用户界面,如果没有人登录,这个界面在第一个根查询中返回null,然后你可以通过传入凭据的登录变异来更新它。 主要问题是在中继后请求中获取cookie或会话,因为它不处理请求中的cookie字
在我当前的设置中,具有不同角色的登录功能仍然通过传统的RESTAPI运行。。。('secured'带有json web令牌)。我在我的一个应用程序中这样做了,基本上你只需要一个用户界面,如果没有人登录,这个界面在第一个根查询中返回null,然后你可以通过传入凭据的登录变异来更新它。 主要问题是在中继后请求中获取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字段填充它。。。这是目前唯一可行的方法…谢谢,我明天就试试。您是否在getUserByCredentials函数中封装了“我发送我自己的请求并用cookie字段填充它”?实际上,这确实是中继的问题,您无法访问post请求下的cookie。我一直等到变异返回客户端,然后我发送一个全新的自制get请求,其中包含填充我的cookie的凭据…,然后在刷新时通过html发送用户ID,并在根查询中传入该用户ID。在没有重置功能的情况下,通过中继本身执行此操作可能不是一个好主意。因为中继在内部缓存GraphQL数据,并且该数据可能是特定于用户的,所以您需要一种在注销或登录时使该缓存失效的方法。目前,我们建议人们在这些事件发生时刷新整个页面。