नोड के लिए उपयोगकर्ता प्रमाणीकरण पुस्तकालयों। js?


274

क्या नोड.जेएस के लिए कोई मौजूदा उपयोगकर्ता प्रमाणीकरण पुस्तकालय हैं? विशेष रूप से मैं ऐसी चीज की तलाश कर रहा हूं जो किसी उपयोगकर्ता के लिए पासवर्ड प्रमाणीकरण कर सकती है (कस्टम बैकएंड डीबी का उपयोग करके), और उस उपयोगकर्ता को सत्र के साथ संबद्ध करें।

इससे पहले कि मैं एक दूसरी लाइब्रेरी लिखता, मुझे लगा कि अगर लोग मौजूदा लाइब्रेरी के बारे में जानते हैं तो मैं देखूंगा। Google खोज के माध्यम से कुछ भी स्पष्ट नहीं पाया जा सका।

-Shreyas


खोज के लिए: कुछ omniauth(रेल) या अजगर के बराबर social-auth। PHP (और अन्य सामान्य वेब सर्वर भाषाओं) को उपयोगकर्ताओं को अपने समकक्ष जोड़ने के लिए स्वतंत्र महसूस करना चाहिए।
forivall

जवाबों:


233

यदि आप कनेक्ट या एक्सप्रेस के लिए प्रमाणीकरण ढाँचे की तलाश कर रहे हैं, तो पासपोर्ट की जाँच के लायक है: https://github.com/jaredhanson/passport

(खुलासा: मैं पासपोर्ट का डेवलपर हूं)

कनेक्ट-ऑवर और हराउथ दोनों की जांच के बाद मैंने पासपोर्ट विकसित किया। जबकि वे दोनों महान मॉड्यूल हैं, वे मेरी जरूरतों के अनुरूप नहीं थे। मैं कुछ ऐसा चाहता था जो हल्का-फुल्का हो और विनीत हो।

पासपोर्ट अलग-अलग मॉड्यूल में टूट गया है, इसलिए आप केवल वही उपयोग कर सकते हैं जो आपको चाहिए (OAuth, केवल यदि आवश्यक हो)। पासपोर्ट आपके आवेदन में किसी भी मार्ग को माउंट नहीं करता है, जिससे आपको यह तय करने की छूट मिलती है कि आप कब और कहाँ प्रमाणीकरण चाहते हैं, और यह नियंत्रित करने के लिए हुक देता है कि प्रमाणीकरण सफल होने या विफल होने पर क्या होता है।

उदाहरण के लिए, फ़ॉर्म-आधारित (उपयोगकर्ता नाम और पासवर्ड) प्रमाणीकरण सेटअप करने के लिए यहां दो-चरण की प्रक्रिया है:

passport.use(new LocalStrategy(
  function(username, password, done) {
    // Find the user from your DB (MongoDB, CouchDB, other...)
    User.findOne({ username: username, password: password }, function (err, user) {
      done(err, user);
    });
  }
));

app.post('/login', 
  passport.authenticate('local', { failureRedirect: '/login' }),
  function(req, res) {
    // Authentication successful. Redirect home.
    res.redirect('/');
  });

फेसबुक, ट्विटर आदि के माध्यम से प्रमाणीकरण के लिए अतिरिक्त रणनीतियां उपलब्ध हैं। यदि आवश्यक हो तो कस्टम रणनीतियों को प्लग-इन किया जा सकता है।


नोड I के लिए सभी चयनित पैकेजों में से मैंने पासपोर्ट का चयन किया। यह अच्छी तरह से प्रलेखित और उपयोग करने में आसान है, और अधिक रणनीतियों का समर्थन करता है।
टेक-मैन

मैं एक प्रोटोटाइप के लिए इस समय पासपोर्ट का उपयोग कर रहा हूं, और मैं इसकी सिफारिश नहीं करता हूं क्योंकि ऐसा लगता है कि इसका रखरखाव नहीं किया गया है, और डिजाइन बहुत अच्छा नहीं है। उदाहरण के लिए, यह आपको कनेक्ट-फ्लैश का उपयोग करने के लिए मजबूर करता है जब यह बस req.session.messages का उपयोग कर सकता है, और पासपोर्ट पर Google द्वारा विज्ञापित पुराना है क्योंकि यह Google OpenId का उपयोग करता है जो कि पदावनत है, और पासपोर्ट के लिए कोई लिंक नहीं है- google-oauth जो इसे प्रतिस्थापित करना चाहिए। यह भी प्रमाणीकरण के बाद एक कॉलबैक का हस्ताक्षर है: done(null,false,{ message:'Incorrect username.' })यह भयानक है क्योंकि हम नहीं जानते कि वे सभी पैरामीटर क्या हैं।
एलोपोन

1
@ मेरे लिए Google को अब पसंद की गई नई प्रमाणीकरण विधियों को इंगित करने के लिए डॉक्स को अपडेट करना होगा। जैसा कि आप उल्लेख करते हैं, उन लोगों के लिए समर्थन मौजूद है और वे अच्छी तरह से काम करते हैं। जैसा कि डिजाइन के सवालों के लिए, पासपोर्ट आपको कनेक्ट-फ्लैश का उपयोग करने के लिए मजबूर नहीं करता है, और आपके द्वारा उल्लिखित तर्कों को गाइड पर प्रलेखित किया जाता है। यदि आपको समझने में सहायता की आवश्यकता है, तो ऐसे फ़ोरम हैं जहाँ लोग आपके प्रश्नों का उत्तर दे सकते हैं।
जेरेड हैन्सन

कुछ नहीं के लिए - लेकिन मैंने सिर्फ पासपोर्ट का उपयोग किया (आपूर्ति की गई मिसाल का इस्तेमाल किया)। सुपर आसान! मुझे लगता है कि यह सबसे हालिया टिप्पणियों के बाद से कुछ साल हो गए हैं। मैं किसी को भी देख लेने की सलाह दूंगा।
टेरी

89

सत्र + यदि

मुझे लगता है कि आपको कई अच्छे पुस्तकालय नहीं मिले हैं, इसका कारण यह है कि प्रमाणीकरण के लिए पुस्तकालय का उपयोग करना ज्यादातर इंजीनियर के काम आता है।

क्या आप के लिए देख रहे हैं सिर्फ एक सत्र बांधने की मशीन है :) के साथ एक सत्र:

if login and user == xxx and pwd == xxx 
   then store an authenticated=true into the session 
if logout destroy session

बस।


मैं आपके निष्कर्ष से असहमत हूं कि कनेक्ट-ऑस्ट्रल प्लगइन जाने का रास्ता है।

मैं भी कनेक्ट का उपयोग कर रहा हूं लेकिन मैं दो कारणों से कनेक्ट-ऑवर का उपयोग नहीं करता हूं:

  1. IMHO कनेक्ट-ऑन को बहुत शक्तिशाली और कनेक्ट करने के लिए प्याज-रिंग आर्किटेक्चर पढ़ने में आसान बनाता है। एक नहीं - मेरी राय :)। आप एक बहुत अच्छा और छोटा लेख पा सकते हैं कि कैसे काम करता है और प्याज की अंगूठी के विचार यहां दिए गए हैं

  2. यदि आप - जैसा लिखा है - बस डेटाबेस या फ़ाइल के साथ एक बुनियादी या http लॉगिन का उपयोग करना चाहते हैं। कनेक्ट-ऑउट रास्ता बहुत बड़ा है। यह OAuth 1.0, OAuth 2.0 और Co जैसे सामान के लिए अधिक है


कनेक्ट के साथ एक बहुत ही सरल प्रमाणीकरण

(यह पूरा हो गया है। बस इसे परीक्षण के लिए निष्पादित करें लेकिन यदि आप इसे उत्पादन में उपयोग करना चाहते हैं, तो https का उपयोग करना सुनिश्चित करें) (और अनुष्ठान-सिद्धांत-शिकायत करने के लिए आपको GET-Request b / c के बजाय POST-Request का उपयोग करना चाहिए तुम एक राज्य बदलो :)

var connect = require('connect');
var urlparser = require('url');

var authCheck = function (req, res, next) {
    url = req.urlp = urlparser.parse(req.url, true);

    // ####
    // Logout
    if ( url.pathname == "/logout" ) {
      req.session.destroy();
    }

    // ####
    // Is User already validated?
    if (req.session && req.session.auth == true) {
      next(); // stop here and pass to the next onion ring of connect
      return;
    }

    // ########
    // Auth - Replace this example with your Database, Auth-File or other things
    // If Database, you need a Async callback...
    if ( url.pathname == "/login" && 
         url.query.name == "max" && 
         url.query.pwd == "herewego"  ) {
      req.session.auth = true;
      next();
      return;
    }

    // ####
    // This user is not authorized. Stop talking to him.
    res.writeHead(403);
    res.end('Sorry you are not authorized.\n\nFor a login use: /login?name=max&pwd=herewego');
    return;
}

var helloWorldContent = function (req, res, next) {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('authorized. Walk around :) or use /logout to leave\n\nYou are currently at '+req.urlp.pathname);
}

var server = connect.createServer(
      connect.logger({ format: ':method :url' }),
      connect.cookieParser(),
      connect.session({ secret: 'foobar' }),
      connect.bodyParser(),
      authCheck,
      helloWorldContent
);

server.listen(3000);

ध्यान दें

मैंने एक साल पहले यह बयान लिखा था और वर्तमान में कोई सक्रिय नोड परियोजना नहीं है। तो एक्सप्रेस में एपीआई-परिवर्तन हो सकते हैं। अगर मुझे कुछ बदलना चाहिए तो कृपया एक टिप्पणी जोड़ें।


क्यों कनेक्ट-ओटियन प्याज / परतों के पैटर्न को तोड़ता है? क्या यह इसलिए है क्योंकि यह अगले () का उपयोग नहीं करता है? यह हो सकता है?
jpstrikesback

3
हाँ। यह अगले () का उपयोग करना चाहिए क्योंकि कनेक्ट के पीछे विचार है। कनेक्ट में एक परत-वास्तुकला / कोड संरचना का रूप है। और हर लेयर में अगली () कॉल न करके अनुरोध निष्पादन को रोकने की शक्ति है। यदि हम प्रमाणीकरण के बारे में बात कर रहे हैं: यदि उपयोगकर्ता के पास सही अनुमति है, तो एक प्रमाणीकरण परत जांच करेगी। यदि सब कुछ ठीक है तो लेयर कॉल अगला () है। यदि यह ऑर्ट-लेयर त्रुटि उत्पन्न नहीं करता है और आगे कॉल नहीं करेगा ()।
मथायस

यार, यह वही है जो मैं देख रहा था। कनेक्ट-ओट मुझे थोड़ा अपच दे रहा था। मैंने पहली बार अपने ऐप में लॉग इन किया है। बहुत बहुत धन्यवाद।
एंडी रे

7
यह अभी भी जवाब देने में मदद नहीं करता है कि डेटाबेस बैकएंड से कनेक्ट कैसे करें (अधिमानतः एन्क्रिप्टेड पासवर्ड के साथ)। मैं आपकी टिप्पणी की सराहना करता हूं कि यह एक पुस्तकालय अति-इंजीनियर है, लेकिन निश्चित रूप से एक ऐसा है जो नहीं है। इसके अलावा, अगर मैं अपनी खुद की ऑर्टिकल प्रणाली लिखना चाहता हूं तो मैंने Java में Struts का उपयोग किया होगा। ओपी की तरह, मैं जानना चाहता हूं कि कौन से प्लगइन्स मेरे लिए कोड की 1 पंक्ति में करेंगे।
हेंड्रिक्सस्की

4
बहुत अच्छा जवाब Nivoc। कनेक्ट थो के नवीनतम संस्करणों के साथ काम नहीं करता है। मुझे बदलना पड़ा ... कुकीडेकोडर () -> कुकीपेयर () और बॉडीकार्ड () -> बॉडीपेयर () और हेल्लोवर्ल्डकंटेंट फ़ंक्शन से अगले () कॉल को हटा दें क्योंकि मुझे एक त्रुटि मिल रही थी 'वे हेडर सेट नहीं कर सकते। भेजे जाते हैं '
माइकल डौसमैन

26

कनेक्ट मिडिलवेयर से कनेक्ट-ऑरिजनल प्लगइन जैसा दिखता है, ठीक वैसा ही मुझे चाहिए: http://wiki.github.com/ciaranj/connect-auth/creating-a-form-based-strategy

मैं एक्सप्रेस [ http://expressjs.com ] का उपयोग कर रहा हूँ, इसलिए कनेक्ट प्लगइन बहुत अच्छी तरह से फिट बैठता है क्योंकि एक्सप्रेस से सबक्लास किया गया है (ठीक - प्रोटोटाइप) कनेक्ट से


1
हे, क्या आपके पास एक उदाहरण है जो आपने किया था? बस कनेक्ट-ऑवर की आवश्यकता होती है और "req" रिटर्न पर ".authenticate" कॉल करना "TypeError: Object # मेरे लिए कोई विधि 'प्रमाणीकृत' नहीं है"।
मिशा रेज़लिन

1
IMHO यह प्लगइन सरल http प्रमाणीकरण के लिए भारी करने का तरीका है
मथायस

और यह प्लगइन कनेक्ट ऑनियन रिंग आर्किटेक्चर के खिलाफ काम करता है
मथायस

14

मैं मूल रूप से उसी चीज की तलाश में था। विशेष रूप से, मैं निम्नलिखित चाहता था:

  1. एक्सप्रेस.जेएस का उपयोग करने के लिए, जो कनेक्ट की मिडलवेयर क्षमता को लपेटता है
  2. "फॉर्म आधारित" प्रमाणीकरण
  3. कौन से मार्गों को प्रमाणित किया जाता है इस पर नियंत्रण
  4. उपयोगकर्ताओं / पासवर्ड के लिए एक डेटाबेस बैक-एंड
  5. सत्र का उपयोग करें

मैंने जो कुछ किया वह अपना मिडलवेयर फंक्शन बना रहा था, check_authजिसे मैं प्रमाणित किए जाने वाले प्रत्येक मार्ग के तर्क के रूप में पास करता हूँ। check_authकेवल सत्र की जाँच करता है और यदि उपयोगकर्ता लॉग इन नहीं है, तो उन्हें लॉगिन पृष्ठ पर पुनर्निर्देशित करता है, जैसे:

function check_auth(req, res, next) {

  //  if the user isn't logged in, redirect them to a login page
  if(!req.session.login) {
    res.redirect("/login");
    return; // the buck stops here... we do not call next(), because
            // we don't want to proceed; instead we want to show a login page
  }

  //  the user is logged in, so call next()
  next();
}

फिर प्रत्येक मार्ग के लिए, मैं यह सुनिश्चित करता हूं कि यह फ़ंक्शन मिडलवेयर के रूप में पारित हो। उदाहरण के लिए:

app.get('/tasks', check_auth, function(req, res) {
    // snip
});

अंत में, हमें वास्तव में लॉगिन प्रक्रिया को संभालने की आवश्यकता है। यह सीधा है:

app.get('/login', function(req, res) {
  res.render("login", {layout:false});
});

app.post('/login', function(req, res) {

  // here, I'm using mongoose.js to search for the user in mongodb
  var user_query = UserModel.findOne({email:req.body.email}, function(err, user){
    if(err) {
      res.render("login", {layout:false, locals:{ error:err } });
      return;
    }

    if(!user || user.password != req.body.password) {
      res.render("login",
        {layout:false,
          locals:{ error:"Invalid login!", email:req.body.email }
        }
      );
    } else {
      // successful login; store the session info
      req.session.login = req.body.email;
      res.redirect("/");
    }
  });
});

किसी भी दर पर, इस दृष्टिकोण को ज्यादातर लचीला और सरल बनाया गया था। मुझे यकीन है कि इसमें सुधार करने के कई तरीके हैं। यदि आपके पास कोई है, तो मुझे आपकी प्रतिक्रिया बहुत पसंद आएगी।

EDIT: यह एक सरलीकृत उदाहरण है। उत्पादन प्रणाली में, आप कभी भी सादे पाठ में पासवर्डों को संग्रहीत और तुलना नहीं करना चाहेंगे। एक टिप्पणीकार बताते हैं, ऐसे लिबास हैं जो पासवर्ड सुरक्षा को प्रबंधित करने में मदद कर सकते हैं।


2
यह अच्छा है, सिवाय इसके कि आपको पासवर्ड के भंडारण के लिए bcrypt का उपयोग करना चाहिए (db में सादा पाठ नहीं)। इसके बारे में यहाँ एक अच्छी पोस्ट है: devsmash.com/blog/…
chovy

13

अगर आप थर्ड पार्टी / सोशल नेटवर्क लॉगइन इंटीग्रेशन चाहते हैं तो भी हर नोट पर एक नज़र डालें ।


7

यहां मेरी एक परियोजना से मूल प्रमाणीकरण के लिए कुछ कोड दिए गए हैं। मैं इसके साथ CouchDB और अतिरिक्त डेटा डेटा कैश के खिलाफ उपयोग करता हूं, लेकिन मैंने वह कोड छीन लिया।

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

/**
 * Authenticate a request against this authentication instance.
 * 
 * @param request
 * @param failureCallback
 * @param successCallback
 * @return
 */
Auth.prototype.authenticate = function(request, failureCallback, successCallback)
{
    var requestUsername = "";
    var requestPassword = "";
    if (!request.headers['authorization'])
    {
        failureCallback();
    }
    else
    {
        var auth = this._decodeBase64(request.headers['authorization']);
        if (auth)
        {
            requestUsername = auth.username;
            requestPassword = auth.password;
        }
        else
        {
            failureCallback();
        }
    }


    //TODO: Query your database (don't forget to do so async)


    db.query( function(result)
    {
        if (result.username == requestUsername && result.password == requestPassword)
        {
            successCallback(requestUsername);
        }
        else
        {
            failureCallback();
        }
    });

};


/**
 * Internal method for extracting username and password out of a Basic
 * Authentication header field.
 * 
 * @param headerValue
 * @return
 */
Auth.prototype._decodeBase64 = function(headerValue)
{
    var value;
    if (value = headerValue.match("^Basic\\s([A-Za-z0-9+/=]+)$"))
    {
        var auth = (new Buffer(value[1] || "", "base64")).toString("ascii");
        return {
            username : auth.slice(0, auth.indexOf(':')),
            password : auth.slice(auth.indexOf(':') + 1, auth.length)
        };
    }
    else
    {
        return null;
    }

};

मैं फॉर्म-आधारित कॉन्ट्रैक्ट के पक्ष में बुनियादी अधिकार से बचना चाहता था। यह निश्चित रूप से बुनियादी समस्या का एक सुंदर समाधान है। मुझे लगता है कि मुझे एक अच्छा ढांचा मिल गया है, हालांकि (कनेक्ट-ऑवर
कनेक्टज के

4

प्रमाणीकरण पर एक अलग पासवर्ड पासवर्ड रहित है, यह व्यक्त करने के लिए एक टोकन-आधारित प्रमाणीकरण मॉड्यूल है जो पासवर्ड की अंतर्निहित समस्या को रोकता है [1]। इसे लागू करना तेज है, बहुत अधिक रूपों की आवश्यकता नहीं है, और औसत उपयोगकर्ता के लिए बेहतर सुरक्षा प्रदान करता है (पूर्ण प्रकटीकरण: मैं लेखक हूं)।

[१]: पासवर्ड अप्रचलित हैं


3

कुछ साल बीत चुके हैं और मैं एक्सप्रेस के लिए अपना प्रमाणीकरण समाधान पेश करना चाहता हूं। इसे लॉकिट कहा जाता है । आप GitHub पर परियोजना और मेरे ब्लॉग पर एक लघु परिचय पा सकते हैं ।

तो मौजूदा समाधानों के क्या अंतर हैं?

  • आसान उपयोग करने के लिए: अपने डीबी की स्थापना की, स्थापित NPM, require('lockit'), lockit(app), किया
  • पहले से निर्मित मार्ग (/ साइनअप, / लॉगिन, / भूल-पासवर्ड, आदि)
  • पहले से निर्मित दृश्य (बूटस्ट्रैप के आधार पर लेकिन आप आसानी से अपने स्वयं के विचारों का उपयोग कर सकते हैं)
  • यह आपके AngularJS / Ember.js सिंगल पेज ऐप्स के लिए JSON संचार का समर्थन करता है
  • यह OAuth और OpenID का समर्थन नहीं करता है। केवल usernameऔर password
  • यह बॉक्स से कई डेटाबेस (CouchDB, MongoDB, SQL) के साथ काम करता है
  • इसके परीक्षण हैं (मुझे ड्रायवल के लिए कोई परीक्षण नहीं मिला)
  • यह सक्रिय रूप से बनाए रखा जाता है (हरथ की तुलना में)
  • ईमेल सत्यापन और पासवर्ड प्रक्रिया भूल गए (टोकन के साथ ईमेल भेजें, पासपोर्ट द्वारा समर्थित नहीं)
  • प्रतिरूपकता: केवल उसी चीज़ का उपयोग करें जिसकी आपको आवश्यकता है
  • लचीलापन: सभी चीजों को अनुकूलित करें

उदाहरणों पर गौर करें ।


2

ड्रायवल नामक एक परियोजना है जो पासपोर्ट के साथ एक उपयोगकर्ता लॉगिन प्रणाली को लागू करती है और इसमें उपयोगकर्ता प्रबंधन व्यवस्थापक पैनल भी है। यदि आप एक पूरी तरह से चित्रित उपयोगकर्ता प्रमाणीकरण और प्रबंधन प्रणाली के लिए कुछ इसी तरह की तलाश कर रहे हैं जो कि Django के पास है, लेकिन Node.js के लिए, यह है। मैंने पाया कि एक नोड ऐप बनाने के लिए यह वास्तव में एक अच्छा शुरुआती बिंदु है जिसे उपयोगकर्ता प्रमाणीकरण और प्रबंधन प्रणाली की आवश्यकता है। पासपोर्ट कैसे काम करता है, इसकी जानकारी के लिए जारेड हैन्सन का जवाब देखें ।



1

Mongo का उपयोग करते हुए त्वरित सरल उदाहरण, एक एपीआई के लिए जो उपयोगकर्ता को कोणीय क्लाइंट के लिए प्रदान करता है

app.js में

var express = require('express');
var MongoStore = require('connect-mongo')(express);

// ...

app.use(express.cookieParser());
// obviously change db settings to suit
app.use(express.session({
    secret: 'blah1234',
    store: new MongoStore({
        db: 'dbname',
        host: 'localhost',
        port: 27017
    })
}));

app.use(app.router);

अपने मार्ग के लिए कुछ इस तरह से:

// (mongo connection stuff)

exports.login = function(req, res) {

    var email = req.body.email;
    // use bcrypt in production for password hashing
    var password = req.body.password;

    db.collection('users', function(err, collection) {
        collection.findOne({'email': email, 'password': password}, function(err, user) {
            if (err) {
                res.send(500);
            } else {
                if(user !== null) {
                    req.session.user = user;
                    res.send(200);
                } else {
                    res.send(401);
                }
            }
        });
    });
};

फिर आपके मार्गों में जिस स्थिति के लिए आपको केवल उपयोगकर्ता सत्र के लिए जाँच की आवश्यकता है:

if (!req.session.user) {
    res.send(403);
}

0

यहां एक नया प्रमाणीकरण पुस्तकालय है जो टाइमस्टैम्प्ड टोकन का उपयोग करता है। टोकन को डेटाबेस में संग्रहीत करने की आवश्यकता के बिना उपयोगकर्ताओं को ईमेल या टेक्स्ट किया जा सकता है। इसका उपयोग पासवर्ड रहित प्रमाणीकरण या दो-कारक प्रमाणीकरण के लिए किया जा सकता है।

https://github.com/vote539/easy-no-password

प्रकटीकरण: मैं इस लाइब्रेरी का डेवलपर हूं।


0

यदि आपको Microsoft Windows उपयोगकर्ता खाते के साथ SSO (सिंगल साइन ऑन) प्रमाणीकरण की आवश्यकता है। आप https://github.com/jlguenego/node-expose-sspi पर एक कोशिश दे सकते हैं ।

यह आपको एक req.ssoऑब्जेक्ट देगा जिसमें सभी क्लाइंट उपयोगकर्ता जानकारी (लॉगिन, प्रदर्शन नाम, सिड, समूह) हैं।

const express = require("express");
const { sso, sspi } = require("node-expose-sspi");

sso.config.debug = false;

const app = express();

app.use(sso.auth());

app.use((req, res, next) => {
  res.json({
    sso: req.sso
  });
});

app.listen(3000, () => console.log("Server started on port 3000"));

डिस्क्लेमर: मैं नोड-एक्सपोज-एसपीआई का लेखक हूं।


0

मिठाई लेखन

एक हल्का, शून्य-कॉन्फ़िगरेशन उपयोगकर्ता प्रमाणीकरण मॉड्यूल। इसके लिए किसी स्पॅट डेटाबेस की आवश्यकता नहीं है।

https://www.npmjs.com/package/sweet-auth

यह सरल है:

app.get('/private-page', (req, res) => {

    if (req.user.isAuthorized) {
        // user is logged in! send the requested page
        // you can access req.user.email
    }
    else {
        // user not logged in. redirect to login page
    }
})
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.