2013-10-16 13 views
6

तैयार करें मैं रेल, तैयार और कुकी आधारित सत्र का उपयोग करके अपने Ember.js ऐप प्रमाणीकरण के साथ 3 लक्ष्यों को पूरा करने के लिए देख रहा हूं।रेल के साथ Ember.js सत्र कुकी आधारित प्रमाणीकरण और

  1. #/sessions/new पर रीडायरेक्ट किया अगर वे में लॉग इन नहीं कर रहे हैं।
  2. हमेशा आवेदन टेम्पलेट में वर्तमान उपयोगकर्ता की जानकारी प्रदर्शित करते हैं।
  3. यदि उपयोगकर्ता लॉग इन है और वे सीधे #/some/route पर जाते हैं। वर्तमान उपयोगकर्ता लोड पर लोड किया जाना चाहिए। Client-side Authentication Part 1 & Client-side Authentication Part 2:

मैं इन embercast वीडियो देखे हैं। वे थोड़ी देर के हैं लेकिन सहायक हैं।

लेकिन अभी भी पूरा समाधान नहीं हो सकता है। किसी के पास पूर्ण रेल 4, डेविस, एम्बरज 1.0.0 उदाहरण है?

सबसे बड़ी समस्या में वर्तमान उपयोगकर्ता को पेज लोड पर लोड करने और साइन इन फॉर्म सबमिट होने पर वर्तमान उपयोगकर्ता को सेट करने की रणनीति है।


App.User = Em.Object.extend(); 

App.User.reopenClass({ 
    current: function() { 
    return Ember.$.getJSON("https://stackoverflow.com/users/current").then(function(data) { 
     return data 
    }) 
    } 
}); 

App.ApplicationRoute = Ember.Route.extend({ 
    model: function() { 
    return App.User.current(); 
    } 
}); 

App.SessionsNewController = Ember.ObjectController.extend({ 

    actions: { 
    save: function(data) { 
     var self = this, data = this.getProperties('email', 'password'); 

     $.post("/sessions", { session: data }).always(function(response, status, data) { 
     if (status == "success") { 
      self.transitionToRoute('index'); 
     } else { 
      self.set('errorMessage', data); 
     } 
     }) 

    }, 
    } 

}); 

उत्तर

8

मैं यह नहीं कहूंगा यह संभव नहीं है:

अभी यह मेरी रणनीति है। लेकिन प्रमाणीकरण काम करने के लिए आप बहुत सारे अतिरिक्त और अनावश्यक काम करेंगे, जो कि एक साधारण पेज रीडायरेक्ट के साथ किया जा सकता है।

मैंने बैकबोन के लेखक डेरिक से कुछ राय एकत्र की हैं। मैरियनेट। हालांकि ये बैकबोन के लिए हैं लेकिन एम्बर.जेएस नहीं हैं, क्लाइंट साइड प्रमाणीकरण की स्थिति समान है।

मुझे यह दर्दनाक और अनावश्यक लगता है कि बैकबोन/मैरियनेट प्रमाणीकरण को संभालने और अधिकृत साइट सामग्री को पुनः लोड करने के लिए अनावश्यक है। एक बार लॉग इन करने के बाद, उन्हें एक अलग यूआरएल पर रीडायरेक्ट करें जो सर्वर संभालता है, और सर्वर को एक प्रमाणित उपयोगकर्ता के रूप में आवश्यक सभी सामान भेजना पड़ता है। https://stackoverflow.com/a/18151935

Derick से एक और उद्धरण के रूप में अच्छी तरह से:

ठीक है। और ऐसे कई मामले हैं जहां मैं बस कहता हूं, "सिंगल पेज एप्लिकेशन न करें"। और एक लॉगिन स्क्रीन उस का सबसे बड़ा उदाहरण है। पिछले कुछ सालों में मेरे सभी ग्राहकों में, उन्होंने सभी मुझसे पूछा है, "अरे, मुझे यह समस्या है। मैं अपनी लॉगिन स्क्रीन को सर्वर से वर्तमान उपयोगकर्ता जानकारी वापस देने की कोशिश कर रहा हूं और स्क्रीन पर इन सभी चीजों को रीफ्रेश किए बिना स्क्रीन पर फिर से शुरू कर रहा हूं। "मेरा जवाब हर बार है," ऐसा मत करो। "http://javascriptjabber.com/056-jsj-marionette-js-with-derick-bailey/

इसके अलावा अन्य मामलों के बारे में सोचना, जीमेल का कहना है। आप क्लिक करने के बाद सुचारु नहीं मिलेगा पेज में जीमेल के चिन्ह पर बटन "प्रवेश करें"। वहाँ नहीं बल्कि बड़े डेटा लोड हो रहा है साथ ही साथ पुन: निर्देशित किया जाएगा :)

उपयोगकर्ताओं के परिप्रेक्ष्य से, वे यह नहीं कहेंगे कि साइन इन करने के बाद रीडायरेक्ट होने पर जीमेल बहुत अच्छा नहीं है। सभी हस्ताक्षर/साइन अप दैनिक मेल ऑपरेशंस की तुलना में बहुत कम बार-बार होता है।

तो मेरा सुझाव है कि उपयोगकर्ता सत्र बदलने के बाद सभी संसाधनों को फिर से लोड करें। परंपरागत फैशन में रेल और देवताओं को इन गंदी नौकरियों को करने दें।

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