2015-10-10 10 views
9

क्या अलग-अलग भूमिकाओं वाले उपयोगकर्ताओं को प्रमाणीकृत करना संभव है, रिले & प्रतिक्रिया के साथ संयोजन में ग्राफिक सर्वर को पूरी तरह से गड़बड़ाना संभव है?Relayjs Graphql उपयोगकर्ता प्रमाणीकरण

मैंने देखा, और इस विषय के बारे में अधिक जानकारी नहीं मिली।

मेरे वर्तमान सेटअप में, विभिन्न भूमिकाओं के साथ लॉगिन सुविधाएं, अभी भी पारंपरिक रीस्ट एपीआई ... ('जेसन वेब टोकन के साथ' सुरक्षित 'जा रही हैं)।

उत्तर

6

मैंने इसे अपने ऐप में से एक में किया है, मूल रूप से आपको केवल एक उपयोगकर्ता इंटरफेस की आवश्यकता है, अगर कोई लॉग इन नहीं होता है तो यह पहली रूट क्वेरी पर वापस आ जाता है, और फिर आप इसे क्रेडेंशियल्स में गुजरने वाले लॉगिन उत्परिवर्तन के साथ अपडेट कर सकते हैं । मुख्य समस्या पोस्ट रिले अनुरोध के अंदर कुकीज़ या सत्र प्राप्त करना है क्योंकि यह अनुरोध में कुकी फ़ील्ड को संभाल नहीं करता है।

यहाँ मेरे मुवक्किल उत्परिवर्तन है:

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

मेरी उन रखने के लिए पृष्ठ ताज़ा के माध्यम से लॉग इन मैं एक कुकी के साथ अपने ही अनुरोध भेजने और इसे भरने फ़ील्ड ... अब यह काम करने का एकमात्र तरीका है ...

+0

धन्यवाद, मैं कल इसे आजमाउंगा। क्या आप getUserByCredentials फ़ंक्शन में 'मैं अपना अनुरोध भेजता हूं और इसे कुकी फ़ील्ड से भरता हूं' को समाहित करता हूं? – Seneca

+0

वास्तव में यह वास्तव में रिले के साथ समस्या है, आपके पास पोस्ट अनुरोध के तहत कुकीज़ तक पहुंच नहीं है। मैं उत्परिवर्तन वापसी क्लाइंट पक्ष तक प्रतीक्षा करता हूं और मैं अपनी कुकी भरने के लिए प्रमाण पत्र के साथ एक नया नया घर का अनुरोध प्राप्त करता हूं ..., फिर रीफ्रेश पर आप उपयोगकर्ता आईडी को अपने एचटीएमएल के माध्यम से भेजते हैं और आपकी रूट क्वेरी में आप उस उपयोगकर्ता आईडी में जाते हैं। – Duduche

+2

रीसेट कार्यक्षमता की अनुपस्थिति में (जो [वर्तमान में रिले नहीं है] (https://github.com/facebook/relay/issues/233)), रिले के माध्यम से ऐसा करना शायद एक अच्छा विचार नहीं है। चूंकि रिले आंतरिक रूप से ग्राफिकल डेटा कैश करता है, और वह डेटा उपयोगकर्ता-विशिष्ट हो सकता है, तो आपको लॉगआउट _or_ लॉगिन पर उस कैश को अमान्य करने का एक तरीका चाहिए। फिलहाल, हम सिफारिश कर रहे हैं कि जब कोई भी घटना होती है तो लोग एक पूर्ण पृष्ठ रीफ्रेश करते हैं। – wincent

संबंधित मुद्दे