2014-10-06 6 views
5

मैं बहुत पाल करने के लिए नए हूँ, लेकिन इस दस्तावेज़ पढ़ सकते हैं और इंटरनेट पर कुछ उदाहरण का पालन करने के बाद, मैं इसे एक शॉट देने का फैसला किया;)सरल प्राधि साथ पाल REST API

मैं एक ऐप्लिकेशन है जो निर्भर बना दिया है एक आरईएसटी webservice पर जो मैं सेल फ्रेमवर्क में बनाना चाहता हूं - लेकिन बहुत सारे शोध के बाद मुझे अभी तक पाल में सही समाधान नहीं मिला है।

मुझे लगता है कि मैं ऐप से बने प्रत्येक webservice कॉल में एक (उपयोगकर्ता नाम, पासवर्ड) या api_key पास करना चाहता हूं?

मुझे मिले सभी उदाहरण केवल सत्र लॉगिन विधि के साथ थे - प्रत्येक कॉल में एपीआई कुंजी के साथ नहीं। प्रवेश पृष्ठ पर पोस्ट पर http://jethrokuan.github.io/2013/12/19/Using-Passport-With-Sails-JS.html

लेकिन सिर्फ लॉगिन - -

मैं इस ट्यूटोरियल के लिए इस्तेमाल किया मैं इसे हर कॉल में प्रवेश करना चाहते हैं और अभी भी बाकी एपीआई ब्लूप्रिंट में निर्माण का उपयोग करना चाहते।

मेरी समाधान में समस्या यह है कि एक फोन पसंद करने के लिए यह है - डिफ़ॉल्ट बाकी विधि की वजह से उम्मीद के रूप में मेरे सभी उपयोगकर्ताओं नहीं देंगे - मैं इसे उपयोगकर्ता प्रमाणन और मुझे परिणाम देना चाहता हूँ ..

http://example.com:1337/user/?username=test&password=xxx

एक आरईएसटी webservice बैकएंड के साथ एक एपीपी बनाने के लिए "सर्वोत्तम प्रथाओं" क्या है? -

"पाल के साथ" मेरे प्रमाणन कोड में से कुछ:

// policies/authentication.js 
if(req.param('username') && req.param('password')) { 
    UserAuth.auth(req, res, function(err, user) { 
     if (err) return res.forbidden('You are not permitted to perform this action.'); 

     if(user) { 
     return next(); 
     } 
    }); 
    }else{ 
    return res.forbidden('You are not permitted to perform this action.'); 
    } 

// services/UserAuth.js 

module.exports = { 

    auth : function(req, res, cb) { 

    var bcrypt = require('bcrypt'); 
    var passport = require("passport"); 

    passport.authenticate('local', function(err, user, info){ 

     if (err) return cb({ error: 'auth error!', status: 400 }); 

     if(user) { 
     cb(null, user); 
     } 

    })(req, res); 

    } 
} 

// config/policies.js 
module.exports.policies = { 

    '*': "authentication" 
}; 
+0

है इस:

module.exports = function (req, res, next) { // Find an access header var accessToken = req.header('my-auth-header'); // No header, no access if (!accessToken) {return res.forbidden();} // Find the user with that token User.findOne({accessToken: accessToken}) .exec(function(err, user) { // Handle error if (err) {return next(err);} // Handle bad access token if (!user) {return res.forbidden();} // Handle success return next(); }); } 

तो फिर तुम किसी भी नियंत्रक क्रियाएँ प्रमाणीकरण की जरूरत है कि config/policies.js file का उपयोग कर सेट कर सकते हैं: API/नीतियों (उदाहरण के लिए) कहा जाता auth.js में एक नीति सेट करें एक पासपोर्ट सवाल? क्या आपको इसे पासपोर्ट टैग देना चाहिए? – Meeker

उत्तर

3

सबसे पहले, यह बुरा व्यवहार लगातार की तरह जंगल में उपयोगकर्ता नाम और पासवर्ड का पर्दाफाश करने के इस। कम से कम, आपको access_tokens जारी करने पर विचार करना चाहिए जो कुछ समय बाद समाप्त हो जाता है, और लॉगिन सिस्टम के माध्यम से पुनः जारी करने की आवश्यकता होती है।

दूसरा, यदि आप प्रत्येक अनुरोध (सत्रों का उपयोग करने के बजाय) पर प्रमाणीकरण करना चाहते हैं, तो क्वेरी स्ट्रिंग में प्रमाण-पत्र डालने के बजाय अनुरोध शीर्षलेख का उपयोग करना बेहतर है। सेल ब्लूप्रिंट का उपयोग करते समय यह विशेष रूप से सच है; अन्यथा आपको keep the blueprints from using your credentials as search criteria पर अतिरिक्त कार्य करना होगा।

हेडर का उपयोग करते समय प्रति अनुरोध प्राधिकरण सेल के साथ सरल हो जाता है।

module.exports = { 

    SomeController: { 
     '*': 'auth' 
    }, 
    ...etc... 
}