নোড- jwt- সরল সহ পাসপোর্ট-স্থানীয় local


87

সফল প্রমাণীকরণের জন্য আমি JWT টোকেনটি ফেরত দিতে কীভাবে পাসপোর্ট-স্থানীয়কে একত্রিত করতে পারি?

আমি নোড-জেভিট-সিম্পল এবং পাসপোর্ট.জেএস দেখতে চাই চাই আমি কীভাবে যাব সে সম্পর্কে নিশ্চিত নই।

var passport = require('passport')
  , LocalStrategy = require('passport-local').Strategy;

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function(err, user) {
      if (err) { return done(err); }
      if (!user) {
        return done(null, false, { message: 'Incorrect username.' });
      }
      if (!user.validPassword(password)) {
        return done(null, false, { message: 'Incorrect password.' });
      }
      return done(null, user);
    });
  }
));

কল করা হয়ে গেলে () করা গেলে কি টোকেনটি ফেরানো সম্ভব? এরকম কিছু ... (কেবলমাত্র ছদ্ম কোড)

if(User.validCredentials(username, password)) {
  var token = jwt.encode({username: username}, tokenSecret);
  done(null, {token : token}); //is this possible?
}

যদি তা না হয় তবে আমি কীভাবে টোকেনটি ফিরিয়ে দিতে পারি?

উত্তর:


123

আমি এটি খুঁজে বের!

সবার আগে আপনাকে সঠিক কৌশলটি প্রয়োগ করতে হবে। আমার ক্ষেত্রে লোকালস্ট্রেজি এবং আপনাকে আপনার বৈধতা যুক্তি সরবরাহ করতে হবে। উদাহরণস্বরূপ আসুন পাসপোর্ট-লোকালটিতে এটি ব্যবহার করুন।

var passport = require('passport')
  , LocalStrategy = require('passport-local').Strategy;

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function(err, user) {
      if (err) { return done(err); }
      if (!user) {
        return done(null, false, { message: 'Incorrect username.' });
      }
      if (!user.validPassword(password)) {
        return done(null, false, { message: 'Incorrect password.' });
      }
      return done(null, user);
    });
  }
));

আপনার প্রদত্ত যাচাইকরণ কল function(username, password, done)ব্যাকটি আপনার ব্যবহারকারীর সন্ধান এবং পাসওয়ার্ড মেলে কিনা তা প্রশ্নের যত্ন নেবে (প্রশ্নের ক্ষেত্র এবং আমার উত্তরের বাইরে)

পাসপোর্ট.জেএস এটির জন্য বেশ কয়েকটি টুকরো আশা করে, একটি হ'ল আপনি কৌশলটিতে ব্যবহারকারীকে ফিরিয়ে দিন। আমি কোডের সেই অংশটি পরিবর্তন করার চেষ্টা করছিলাম এবং এটি ভুল ছিল। কলব্যাকটি প্রত্যাশা করে falseযদি বৈধতা ব্যর্থ হয় এবং একটিobject আপনি সফল হন তবে (বৈধ ব্যবহারকারী)।

এখন .... জেডাব্লুটি সংহত কিভাবে?

আপনার লগইন রুটে আপনাকে একটি সফল লেখক বা একটি ব্যর্থ একটি পরিচালনা করতে হবে। এবং এটি এখানে আপনার JWT টোকেন সৃষ্টি যুক্ত করতে হবে add তাই ভালো:

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

পাসপোর্ট-স্থানীয় উদাহরণ থেকে: (JWT টোকেন যুক্ত)

// POST /login
//   This is an alternative implementation that uses a custom callback to
//   achieve the same functionality.
app.post('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err) }
    if (!user) {
      return res.json(401, { error: 'message' });
    }

    //user has authenticated correctly thus we create a JWT token 
    var token = jwt.encode({ username: 'somedata'}, tokenSecret);
    res.json({ token : token });

  })(req, res, next);
});

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

এর পরে আপনার লগইন রুটটি কল করা হবে এবং সেখানে আপনি কোনও ত্রুটি বা বৈধ টোকেন ফিরিয়ে দেওয়ার যত্ন নিতে পারেন।

আশা করি এটি কারও সাহায্য করবে। এবং যদি আমি কোনও ভুল করে ফেলেছি বা কিছু ভুলে গেছি তবে আমাকে জানান।


4
পাসপোর্টের বেসিকস্ট্রেজি বা ডাইজেস্টস্ট্রজি অন্য দুটি বিকল্প। বেসিক এবং স্থানীয় কৌশলগুলির মধ্যে বিশাল পার্থক্য বলে মনে হচ্ছে না, যেহেতু দু'জনেরই কাজ করার জন্য সেশনের প্রয়োজন নেই - ঠিক যে স্থানীয়রাই ইউআরএলগুলি পুনর্নির্দেশের জন্য জিজ্ঞাসা করে (এটি কিছুটা কম এপিআই বান্ধব করে তোলে)।
ফানসিকি

4
আরে @cgiacomi আপনি কি এমন রুটের উদাহরণ দিতে পারেন যা টোকনটি পরীক্ষা করে?
ম্যাট কিম

4
আরে @ ম্যাট-কিম আসলে আমি টোকেন সংরক্ষণ করি না, এটি ক্ষণস্থায়ী। আমি জানি না এটি সবচেয়ে ভাল উপায় কিনা বা না তবে এটি আমিই করি: ব্যবহারকারী সত্যায়িত করে, এবং আমি টোকেনটি উত্পন্ন করে ক্লায়েন্টকে ফিরিয়ে দিই। ক্লায়েন্ট যদি কোনও ওয়েবসাইট হয় তবে টোকনটি লোকালস্টোরারেজে সংরক্ষিত থাকে বা আপনি এটি আইফোন / অ্যান্ড্রয়েড অ্যাপে সঞ্চয় করতে পারেন। যখন কোনও ক্লায়েন্টকে কোনও সংস্থার জন্য একটি অনুরোধ করতে হয় তা সেভ টোকনটি ব্যাকএন্ডে প্রেরণ করে। পাসপোর্ট টোকেনটি পরিচালনা করবে। টোকেন gist.github.com/cgiacomi/cd1efa187b8cccbe2a61 হ্যান্ডেল করার জন্য বাহক কৌশলটির একটি সূচনা এখানে আশা করি এটি সাহায্য করবে! :)
cgiacomi

4
আরে @cgiacomi! সম্ভবত এটি সুস্পষ্ট, তবে আপনি কী বর্ণনা করতে পারবেন কাস্টম কলব্যাক ব্যবহার করার সময় আপনি কীভাবে সেশনগুলি অক্ষম করবেন?
মিঃ মিঃ

4
@ এমআরমুহ লিঙ্কটি চেকআউট করুন gist.github.com/cgiacomi/cd1efa187b8cccbe2a61 আমার মন্তব্যে আমি দেখিয়েছি কীভাবে সেশনগুলি নিষ্ক্রিয় করতে হবে: পাসপোর্ট.আউটিক্যান্টেট ('বাহক', {অধিবেশন: মিথ্যা})
সিজিএকমি

18

এটি একটি দুর্দান্ত সমাধান, আমি কেবল এটি যুক্ত করতে চাই:

var expressJwt = require('express-jwt');

app.use('/api', expressJwt({secret: secret}));

আমি টোকেনটি বৈধ করার জন্য "এক্সপ্রেস-জেভিডাব্লুটি" ব্যবহার করতে চাই ।

বিটিডব্লিউ: প্রতিটি অনুরোধের সাথে এটিকে ফেরত পাঠানোর জন্য কৌনিক পক্ষের টোকেনটি কীভাবে পরিচালনা করতে হবে তা শিখতে এই নিবন্ধটি দুর্দান্ত

https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/


4
আমি কেবল express-jwtপ্রমাণীকরণ করতে ব্যবহার করেছি , তবে অন্যান্য প্যাকেজগুলির ডকুমেন্টেশনগুলি পড়ে যেমন passport-jwtআমি মনে করি আমি আঁকড়ে থাকব express-jwt। অনেক সহজ, অনেক সুন্দর আইএমও
ববিজ

কেবল একটি এফওয়াইআই এক্সপ্রেস-জেভিটি রিফ্রেশ টোকেনের জন্য সমর্থন সরবরাহ করে না।
ব্যবহারকারী3344977

3

এখানে কেবলমাত্র এপিআই টোকেন ব্যবহার করার জন্য আমি বয়লার-প্লেট নিয়ে কাজ করছি (কোন সেশন নয় ... সেই সেশনটি অবশ্যই খারাপ নয়; কেবলমাত্র আমরা টোকেন পদ্ধতির ব্যবহার করছি): https://github.com/roblevintennis/passport -পি-টোকেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.