2015-10-10 25 views
9

Röle & reaktörü ile kombinasyon halinde yalnızca bir grafql sunucusundan farklı roller olan kullanıcıların kimliğini doğrulamak mümkün mü?Relayjs Graphql kullanıcı kimlik doğrulaması

Etrafa baktım ve bu konu hakkında fazla bilgi bulamadım.

Geçerli kurulumda, farklı rollerdeki giriş özellikleri hala geleneksel bir REST API'sine gidiyor ... ('json web jetonlarıyla' güvenli ').

cevap

6

Uygulamamın birinde yaptım, temelde sadece bir Kullanıcı Arayüzü'ne ihtiyacınız var, hiç kimse giriş yapmamışsa, ilk root sorgusunda bu null değerini döndürür ve daha sonra kimlik bilgilerini girerek oturum açma mutasyonuyla güncelleyebilirsiniz . Ana sorun, istekte bulunan çerez alanını işlememediği için, posta aktarma isteği içinde çerez veya oturum almaktır. Ben bir çerez ile kendi isteği göndermek ve doldurun

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; 
    }) 
}); 

Kullanıcılarıma tutmak için sayfa yenileme yoluyla açmış benim şema yan mutasyon

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 
     } 
    } 
    `; 
    } 
} 

ve burada: Burada

müvekkilim mutasyon alan ... Bu iş için bunu yapmanın tek yolu ...

+0

Teşekkürler, yarın deneyeceğim. GetUserByCredentials işlevinde 'Kendi isteğimi gönderir ve bir çerez alanıyla doldururum' mu? – Seneca

+0

aslında bu gerçekten röle ile ilgili bir problemdir, posta isteğine göre çerezlere erişiminiz yoktur. Mutasyon müşteriye dönünceye kadar bekleyeceğim ve çerezimi doldurmak için kimlik bilgileriyle yepyeni bir ev yapımı istek yolladım ... ve daha sonra kullanıcı kimliğinizi html yoluyla ve kök sorgunuzda o userID'de geçirdiğinizde yenileyin. – Duduche

+2

Sıfırlama işlevselliğinin yokluğunda (ki [Relay şu anda mevcut değil) (https://github.com/facebook/relay/issues/233)), bunu Relay üzerinden yapmak muhtemelen iyi bir fikir değildir. Relay, GraphQL verilerini dahili olarak önbelleğe aldığından ve bu veriler kullanıcıya özgü olabileceğinden, bu önbelleği _or_ oturum açmada geçersiz kılmanın bir yoluna ihtiyacınız vardır. Şu anda, bu etkinliklerden biri gerçekleştiğinde kullanıcıların tam sayfa yenilemesi yapmasını öneririz. – wincent

İlgili konular