اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

من خلال الإعتماد على middleware passport.session() لحفظ البيانات من backend إلى cookies في frontend تلقائيًا.، وذلك الوسيط middleware يستخدم مكتبة cookie-session لإنشاء وإدارة جلسات المستخدم.

وللاستخدام، أضف passport.session() إلى middleware chain الخاص بك:

app.use(passport.session());

ثم، يمكنك استخدام استراتيجية Passport الخاصة بك لحفظ البيانات في الجلسة، مثلا في حال  كنت تستخدم استراتيجية passport.local()، تستطيع حفظ اسم المستخدم وكلمة المرور في الجلسة باستخدام الكود التالي:

passport.use(new LocalStrategy((username, password, done) => {
  // Check the username and password against the database
  if (username === 'kerlos' && password === 'secret') {
    // The user is authenticated
    done(null, user);
  } else {
    // The user is not authenticated
    done(new Error('Invalid username or password'));
  }
}));

بمجرد حفظ البيانات في الجلسة، سيتم إرجاعها إلى frontend تلقائيًا.

وبإمكانك الوصول إلى البيانات باستخدام middleware cookie-parser()، ومثلاً للحصول على على اسم المستخدم نستخدم التالي:

const username = req.cookies.username;

وباستطاعتك أيضًا استخدام middleware cookie-parser() لإزالة البيانات من الجلسة،  فلتسجيل خروج المستخدم، استخدم الكود التالي:

req.session.destroy();

وإليك مثال كامل:

const express = require('express');
const passport = require('passport');
const cookieSession = require('cookie-session');

// Create an Express app
const app = express();

// Configure passport
app.use(passport.initialize());
app.use(passport.session({
  secret: 'secret',
}));

// Define a route that requires authentication
app.get('/protected', passport.authenticate('local'), (req, res) => {
  // The user is authenticated
  res.send('Hello, ' + req.user.username);
});

// Define a route that logs the user in
app.post('/login', (req, res) => {
  // Check the username and password against the database
  if (req.body.username === 'johndoe' && req.body.password === 'secret') {
    // The user is authenticated
    passport.authenticate('local')(req, res, () => {
      res.redirect('/protected');
    });
  } else {
    // The user is not authenticated
    res.send('Invalid username or password');
  }
});

// Define a route that logs the user out
app.get('/logout', (req, res) => {
  // Invalidate the user's session
  req.session.destroy();
  res.redirect('/');
});

// Start the app
app.listen(3000, () => {
  console.log('App listening on port 3000');
});

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...