নোড.জেএস এর জন্য ব্যবহারকারীর অনুমোদনের পাঠাগারগুলি?


274

নোড.জেএস এর জন্য কোনও বিদ্যমান ব্যবহারকারীর প্রমাণীকরণ গ্রন্থাগার রয়েছে? বিশেষত আমি এমন কিছু সন্ধান করছি যা কোনও ব্যবহারকারীর জন্য পাসওয়ার্ড প্রমাণীকরণ করতে পারে (একটি কাস্টম ব্যাক-এন্ড অ্যাথ ডিবি ব্যবহার করে) এবং সেই ব্যবহারকারীকে একটি সেশনের সাথে যুক্ত করে।

আমি একটি লেখক গ্রন্থাগার লেখার আগে, আমি ভেবেছিলাম যে লোকেরা বিদ্যমান লাইব্রেরিগুলি সম্পর্কে জানত কিনা। গুগল অনুসন্ধানের মাধ্যমে সুস্পষ্ট কিছু খুঁজে পাওয়া যায়নি।

-Shreyas


অনুসন্ধানযোগ্যতার জন্য: কিছু কিছু omniauth(রেল) বা পাইথনের সমতুল্য social-auth। পিএইচপি (এবং অন্যান্য সাধারণ ওয়েব সার্ভার ভাষা) ব্যবহারকারীদের পাশাপাশি তাদের সমতুল্য যোগ করতে নির্দ্বিধায় উচিত।
forivall

উত্তর:


233

আপনি যদি কানেক্ট বা এক্সপ্রেসের জন্য কোনও প্রমাণীকরণ কাঠামো সন্ধান করছেন তবে পাসপোর্টটি তদন্তের জন্য উপযুক্ত: https://github.com/jaredhanson/passport

(প্রকাশ: আমি পাসপোর্টের বিকাশকারী)

আমি সংযোগ-প্রমাণীকরণ এবং প্রত্যেককেই অনুসন্ধানের পরে পাসপোর্ট তৈরি করেছি। যদিও তারা উভয়ই দুর্দান্ত মডিউল, তারা আমার প্রয়োজন অনুসারে নয়। আমি এমন কিছু চেয়েছিলাম যা আরও কম ওজনযুক্ত এবং স্ববিরোধী।

পাসপোর্টটি পৃথক মডিউলে বিভক্ত হয়ে গেছে, সুতরাং আপনি কেবল যা প্রয়োজন (কেবলমাত্র প্রয়োজন হলে OAuth) ব্যবহার করতে পারেন use পাসপোর্ট আপনার অ্যাপ্লিকেশনটিতে কোনও রুটও মাউন্ট করে না, আপনি কখন এবং কোথায় প্রমাণীকরণ চান তা নির্ধারণ করার নমনীয়তা প্রদান করে এবং প্রমাণীকরণ সাফল্য হয় বা ব্যর্থ হলে কী ঘটে তা নিয়ন্ত্রণ করতে হুক সরবরাহ করে।

উদাহরণস্বরূপ, ফর্ম-ভিত্তিক (ব্যবহারকারীর নাম এবং পাসওয়ার্ড) প্রমাণীকরণ সেটআপ করার জন্য এখানে দ্বি-পদক্ষেপ প্রক্রিয়াটি রয়েছে:

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('/');
  });

অতিরিক্ত কৌশলগুলি ফেসবুক, টুইটার ইত্যাদির মাধ্যমে প্রমাণীকরণের জন্য উপলব্ধ Custom কাস্টম কৌশলগুলি প্রয়োজনে প্লাগ-ইন করা যেতে পারে।


নোডের জন্য সমস্ত লেখক প্যাকেজের মধ্যে আমি পাসপোর্ট নির্বাচন করেছি। এটি ভাল-ডকুমেন্টেড এবং ব্যবহার করা সহজ এবং আরও কৌশল সমর্থন করে।
টেক ম্যান

আমি এই মুহুর্তে একটি প্রোটোটাইপের জন্য পাসপোর্ট ব্যবহার করছি, এবং এটির প্রস্তাবনা রাখছি না কারণ এটি রক্ষণাবেক্ষণ করা হয়নি বলে মনে হচ্ছে, এবং নকশাটি খুব ভাল নয়। উদাহরণস্বরূপ, এটি আপনাকে সংযোগ-ফ্ল্যাশ ব্যবহার করতে বাধ্য করে যখন এটি কেবলমাত্র req.session.messages ব্যবহার করতে পারে, এবং ওয়েবসাইটটিতে বিজ্ঞাপন দেওয়া পাসপোর্ট-গুগল পুরানো হয়ে যায় কারণ এটি Google ওপেনআইডি ব্যবহার করে যা অবহেলা করা হয়, এবং পাসপোর্ট- এর কোনও লিঙ্ক নেই- গুগল-ওউথ যা এটি প্রতিস্থাপন করা উচিত। প্রমাণীকরণের পরে done(null,false,{ message:'Incorrect username.' })এটি একটি কলব্যাকের স্বাক্ষর: এটি ভয়ানক। যেহেতু আমরা জানি না যে এই সমস্ত পরামিতিগুলি কী।
ইলুন

1
গুগল এখন পছন্দ করে এমন নতুন প্রমাণীকরণ পদ্ধতির দিকে ইঙ্গিত করার জন্য @ এলিয়ুন আমাকে ডক্স আপডেট করতে হবে। আপনি উল্লেখ হিসাবে, সমর্থন তাদের জন্য বিদ্যমান এবং তারা ভাল কাজ করে। নকশা প্রশ্নগুলির হিসাবে, পাসপোর্ট আপনাকে সংযোগ-ফ্ল্যাশ ব্যবহার করতে বাধ্য করে না, এবং আপনি যে আর্গুমেন্টগুলি উল্লেখ করেছেন সেটি গাইডে নথিভুক্ত রয়েছে। আপনার যদি বোঝার জন্য সহায়তা প্রয়োজন, এমন ফোরাম রয়েছে যেখানে লোকেরা আপনার প্রশ্নের সহায়তা এবং উত্তর দিতে পারে।
জ্যারেড হ্যানসন

কোনও কিছুর জন্য নয় - তবে আমি কেবল পাসপোর্ট প্লাগিং শেষ করেছি (সরবরাহিত উদাহরণ ব্যবহৃত হয়েছে)। সুপার ইজি! আমি বুঝতে পেরেছি যে সাম্প্রতিক মন্তব্যগুলির পরে কয়েক বছর হয়েছে। আমি কাউকে একবার দেখুন সুপারিশ করব।
টায়ার করুন

89

সেশন + যদি

আমি অনুমান করি যে আপনি অনেক ভাল গ্রন্থাগার খুঁজে পান নি যে প্রমাণীকরণের জন্য একটি লাইব্রেরি ব্যবহার বেশিরভাগ ইঞ্জিনিয়ারড।

আপনি যা খুঁজছেন তা কেবল একটি সেশন-বাইন্ডার :) এর সাথে একটি সেশন:

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

এটাই.


আমি আপনার উপসংহারের সাথে একমত নই যে কানেক্ট-আথ প্লাগইন হ'ল উপায়।

আমিও ব্যবহার করছি সংযোগ কিন্তু আমি দুটি কারণে কানেক্ট-প্রমাণীকরণ ব্যবহার করেন না:

  1. আইএমএইচও সংযোগ-আথকে খুব শক্তিশালী এবং সংযোগের পেঁয়াজ-রিং আর্কিটেকচারটি পড়তে সহজ করে। না-যেতে - আমার মতামত :)। কীভাবে কানেক্ট কাজ করে এবং পেঁয়াজ রিং ধারণা সম্পর্কে একটি খুব ভাল এবং স্বল্প নিবন্ধ জানতে পারেন এখানে

  2. আপনি যদি - লিখিত হিসাবে - কেবল ডাটাবেস বা ফাইলের সাথে একটি বেসিক বা HTTP লগইন ব্যবহার করতে চান। কানেক্ট-আথটি বেশ বড়। এটি OAuth 1.0, OAuth 2.0 এবং Co এর মতো জিনিসগুলির জন্য আরও বেশি


সংযোগ সহ একটি খুব সাধারণ প্রমাণীকরণ

(এটি সম্পূর্ণ। টেস্টিংয়ের জন্য এটি কার্যকর করুন তবে আপনি যদি এটির উত্পাদনে ব্যবহার করতে চান তবে https ব্যবহার করতে ভুলবেন না) (এবং REST- নীতি-অনুগত হওয়ার জন্য আপনাকে জিইটি-অনুরোধ বি / সি-এর পরিবর্তে একটি পোষ্ট-অনুরোধ ব্যবহার করা উচিত) আপনি একটি রাষ্ট্র পরিবর্তন :)

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
এটি কীভাবে কোনও ডাটাবেস ব্যাকএন্ডে (সাধারণত এনক্রিপ্ট করা পাসওয়ার্ড সহ) সংযুক্ত করতে হবে তার উত্তর দিতে সহায়তা করে না। আমি আপনার মন্তব্যটির প্রশংসা করি যে এটি একটি লাইব্রেরি অতিরিক্ত ইঞ্জিনিয়ারড, তবে অবশ্যই এটির একটি নেই। এছাড়াও, আমি যদি নিজের লেখার সিস্টেমটি লিখতে চাইতাম তবে জাভাতে স্ট্রুট ব্যবহার করতাম। ঠিক ওপি-এর মতোই, আমি জানতে চাই যে কোডের 1 লাইনে কোন প্লাগইন আমার জন্য এটি করবে।
হেন্ডরিক্সস্কি

4
দুর্দান্ত উত্তর সংযোগের সর্বশেষতম সংস্করণগুলির সাথে কাজ করে না। আমাকে বদলাতে হয়েছিল ... কুকি ডেকোডার () -> কুকি পার্সার () এবং বডি ডেকোডার () -> বডি পার্সার () এবং হ্যালো ওয়ার্ল্ড কনটেন্ট ফাংশন থেকে পরবর্তী () কলটি সরিয়ে ফেলতে হবে কারণ আমি ত্রুটি পেয়ে যাচ্ছিলাম 'তাদের পরে শিরোলেখ সেট করা যায় না Can প্রেরিত হয়েছে '
মাইকেল দাউসমান

26

দেখে মনে হচ্ছে সংযুক্ত মিডওয়্যারের সাথে সংযুক্ত-আথ প্লাগইনটি আমার প্রয়োজন ঠিক: http://wiki.github.com/ciaranj/connect-auth/creating-a-form-based-strategy

আমি এক্সপ্রেস [ http://expressjs.com ] ব্যবহার করছি তাই এক্সপ্রেস সংযোগ থেকে সাবক্ল্যাসড (ঠিক আছে - প্রোটোটাইপ) হওয়ায় সংযোগ প্লাগইনটি খুব সুন্দরভাবে ফিট করে


1
আরে, আপনি যা করেছেন তার উদাহরণ আছে? কেবল কানেক্ট-অথের প্রয়োজন হয় এবং "রেকর্ড" -কে ".authenticate" কল করে "TypeError: অবজেক্ট # এর কোনও পদ্ধতিই 'প্রমাণীকরণযোগ্য' নেই আমার জন্য।
মিশা রেজলিন

1
আইএমএইচএও এই প্লাগইনটি সহজ 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("/");
    }
  });
});

যে কোনও হারে, এই পদ্ধতির বেশিরভাগ ক্ষেত্রে নমনীয় এবং সহজ হতে ডিজাইন করা হয়েছিল। আমি নিশ্চিত এটির উন্নতি করার অনেকগুলি উপায় রয়েছে। আপনার যদি কিছু থাকে তবে আমি আপনার প্রতিক্রিয়াটি খুব পছন্দ করব।

সম্পাদনা: এটি একটি সরলীকৃত উদাহরণ। কোনও প্রোডাকশন সিস্টেমে আপনি কখনই সরল পাঠ্যে পাসওয়ার্ড সংরক্ষণ এবং তুলনা করতে চাইবেন না। একজন মন্তব্যকারী উল্লেখ করার সাথে সাথে এমন লিবস রয়েছে যা পাসওয়ার্ড সুরক্ষা পরিচালনা করতে সহায়তা করতে পারে।


2
এটি ভাল, আপনার পাসওয়ার্ড সংরক্ষণের জন্য bcrypt ব্যবহার করা উচিত (ডিবিতে সরল পাঠ্য নয়)। এটি সম্পর্কে এখানে একটি ভাল পোস্ট রয়েছে: devsmash.com/blog/…
chovy


7

আমার এক প্রকল্পের বুনিয়াদি প্রমাণীকরণের জন্য এখানে কিছু কোড। আমি এটিকে কাউচডিবি এবং অতিরিক্ত প্রমাণীকরণের ডেটা ক্যাশে সহ ব্যবহার করি, তবে আমি সেই কোডটি সরিয়ে নিয়েছি।

হ্যান্ডলিংয়ের অনুরোধ করে আপনার চারপাশে একটি প্রমাণীকরণ পদ্ধতি মোড়ানো এবং অসফল প্রমাণীকরণের জন্য একটি দ্বিতীয় কলব্যাক সরবরাহ করুন। সাফল্য কলব্যাক অতিরিক্ত পরামিতি হিসাবে ব্যবহারকারীর নাম পাবে। ব্যর্থতা কলব্যাকে ভুল বা অনুপস্থিত শংসাপত্রগুলির সাথে অনুরোধগুলি সঠিকভাবে পরিচালনা করতে ভুলবেন না:

/**
 * 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]। এটি প্রয়োগ করা দ্রুত, খুব বেশি ফর্মের প্রয়োজন হয় না এবং গড় ব্যবহারকারীর জন্য আরও ভাল সুরক্ষা সরবরাহ করে (সম্পূর্ণ প্রকাশ: আমি লেখক)।

[1]: পাসওয়ার্ডগুলি অপ্রচলিত


3

কয়েক বছর কেটে গেছে এবং আমি এক্সপ্রেসের জন্য আমার প্রমাণীকরণ সমাধানটি উপস্থাপন করতে চাই। একে বলা হয় লকিত । আপনি আমার ব্লগে গিটহাব এবং একটি সংক্ষিপ্ত পরিচয় প্রকল্পটি পেতে পারেন ।

সুতরাং বিদ্যমান সমাধানের মধ্যে পার্থক্যগুলি কী কী?

  • সহজ ব্যবহার করার জন্য: আপনার ডিবি সেট আপ, ইনস্টল npm, require('lockit'), lockit(app), সম্পন্ন
  • ইতিমধ্যে অন্তর্নির্মিত রুটগুলি (/ সাইনআপ, / লগইন, / ভুলে যাওয়া-পাসওয়ার্ড ইত্যাদি)
  • ইতিমধ্যে অন্তর্নির্মিত দর্শনগুলি (বুটস্ট্র্যাপের উপর ভিত্তি করে তবে আপনি সহজেই নিজের মতামত ব্যবহার করতে পারেন)
  • এটি আপনার অ্যাংুলারজেএস / এমবার.জেএস একক পৃষ্ঠার অ্যাপ্লিকেশনগুলির জন্য জেএসএন যোগাযোগকে সমর্থন করে
  • এটি OAuth এবং ওপেনআইডি সমর্থন করে না। শুধু usernameএবং password
  • এটি বক্সের বাইরে বেশ কয়েকটি ডাটাবেস (কাউচডিবি, মঙ্গোডিবি, এসকিউএল) নিয়ে কাজ করে
  • এটির পরীক্ষা রয়েছে (ড্রাইওয়ালের জন্য আমি কোনও পরীক্ষা খুঁজে পাইনি)
  • এটি সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয় (প্রত্যেকের তুলনায়)
  • ইমেল যাচাইকরণ এবং পাসওয়ার্ড প্রক্রিয়া ভুলে গেছেন (টোকেন সহ ইমেল প্রেরণ করুন, পাসপোর্ট দ্বারা সমর্থিত নয়)
  • সামঞ্জস্যতা: আপনার যা প্রয়োজন কেবল তা ব্যবহার করুন
  • নমনীয়তা: সমস্ত জিনিস কাস্টমাইজ করুন

কটাক্ষপাত উদাহরণ


2

ড্রাইওয়াল নামে একটি প্রকল্প রয়েছে যা পাসপোর্ট সহ কোনও ব্যবহারকারী লগইন সিস্টেম প্রয়োগ করে এবং এতে একটি ব্যবহারকারী পরিচালনা অ্যাডমিন প্যানেল রয়েছে। আপনি যদি কোনও পুরোপুরি বৈশিষ্ট্যযুক্ত ব্যবহারকারী প্রমাণীকরণ এবং পরিচালনা সিস্টেম সন্ধান করছেন যা জ্যাঙ্গোর কাছে নোড.জেএস এর মতো কিছু রয়েছে তবে এটি এটি। আমি এটি একটি নোড অ্যাপ্লিকেশন তৈরির জন্য সত্যই একটি ভাল সূচনা পয়েন্ট হিসাবে পেয়েছি যার জন্য ব্যবহারকারীর প্রমাণীকরণ এবং পরিচালনা ব্যবস্থা প্রয়োজন। পাসপোর্ট কীভাবে কাজ করে তার তথ্যের জন্য জারেড হ্যানসনের উত্তর দেখুন ।



1

মঙ্গো ব্যবহার করে দ্রুত সরল উদাহরণ, এমন একটি এপিআই যা কৌনিক ক্লায়েন্টের জন্য ব্যবহারকারীকে সরবরাহ করে

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

আপনার যদি মাইক্রোসফ্ট উইন্ডো ব্যবহারকারীর অ্যাকাউন্টের সাথে এসএসওর (একক সাইন অন) প্রমাণীকরণের প্রয়োজন হয়। আপনি 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
    }
})
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.