احرازهویت در api به روش jwt

زمان قرارگیری : 12 مرداد 1397
زمان این قسمت : 44:27
برای دسترسی به این دوره نیاز است بصورت نقدی این دوره را خریداری کنید و این دوره بخشی از دوره های اعضای ویژه نمیباشد

تعداد شرکت کنندگان 601 نفر
قیمت دوره 149000 تومان
وضعیت دوره تکمیل شده
زمان کل دوره 33:26:16
تعداد قسمت‌ها 64
نوع دسترسی نقدی

در این جلسه در مورد روت های صحبت میکنم که نیاز به احرازهویت دارند یعنی تنها توسط کاربران عضو قابل دسترسی هستند اما از طریق api چطور بفهمیم که یک کاربر لاگین هست یا خیر ؟ در این جلسه در مورد احرازهویت در api به روش jwt صحبت میکنم

رایگان 08:09
رایگان 21:49
رایگان 16:45
برای دسترسی به این دوره نیاز است بصورت نقدی این دوره را خریداری کنید و این دوره بخشی از دوره های اعضای ویژه نمیباشد

تعداد شرکت کنندگان 601 نفر
قیمت دوره 149000 تومان
وضعیت دوره تکمیل شده
زمان کل دوره 33:26:16
تعداد قسمت‌ها 64
نوع دسترسی نقدی

آفلاین
user-avatar
مدرس دوره حسام موسوی

اول داستان، طراح گرافیک بودم و ۲ سالی به عنوان طراح مشغول بودم، بعد به برنامه‌نویسی علاقمند شدم و الان بیشتر از ۱۰ ساله که عاشق کدزنی و چالش‌های پروژه‌های مختلفم. به تدریس علاقه خاصی دارم و دوست دارم دانشی که در این راه بدست آوردم را در اختیار دیگران هم قرار بدم. 

سوالات و گفتگو‌ها

سوالات و گفتگو‌ها

اگر سوال و مشکلی یا حتی بحثی در یکی از حوزه‌های برنامه‌نویسی دارید این بخش به شما کمک ویژه‌ای خواهد کرد

دورهای پیشنهادی

مشاهده همه دوره ها
آموزش nodejs

آموزش nodejs

node یک پلتفرم است که به شما اجازه میدهد از جاوااسکریپت سمت سرور برای ایجاد کردن اپلیکیشن‌های وب خود استفاده کنید، در این دوره به شما nodejs را آموزش...

دسترسی رایگان برای اعضای ویژه
پروژه‌های جاوااسکریپت

پروژه‌های جاوااسکریپت

در این دوره تصمیم دارم با پیاده‌سازی کردن پروژه‌های مختلف با استفاده از جاوااسکریپت، خود جاوااسکریپت را به افرادی که به تازگی شروع به یادگیری آن کرده‌...

دسترسی رایگان برای اعضای ویژه
آموزش Redux

آموزش Redux

شاید تا به حال اسم Redux رو نشنیده باشید اما اگر با جاوااسکریپت یا کتابخانه ReactJs کار کردید حتما پیشنهاد میکنم این توضیحات رو مطالعه کنید . ببینید R...

دسترسی رایگان برای اعضای ویژه
آموزش پروژه محور Vuex

آموزش پروژه محور Vuex

vuejs به سرعت و به طور باورنکردنی محبوب شده است، به دلیل اینکه بسیار فریم ورک قدرتمندی است و هم فوق العاده ساده برای یاد گیری میباشد.یادگیری فریم ورک ...

دسترسی رایگان برای اعضای ویژه

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
آفلاین
user-avatar

سلام
اگه به هر دلیلی یه توکن جدید ساخته شد چجور میشه توکن قبلی رو پاک کرد ؟
یا مثلا وقتی کاربر لوگ اوت میکنه از اپلیکیشن

آفلاین
user-avatar
حسام موسوی
4 ماه پیش

معمولا این token در فضای ذخیره سازی رو موبایل یا مرورگر ذخیره میشه اونو حذف کنید تمام میشه .

آفلاین
user-avatar

سلام آقای موسوی
من یک middleware نوشتم که در قسمت setupConfig فایل index اصلی با app.use فراخوانی میشه و کارش ثبت IP کاربر، route فراخوانی شده و user id و ذخیره این رکورد در دیتابیس هست.این ماژول هم برای WEB و هم API به درستی کار می‌کنه. تنها مشکل فعلی من اینه که در زمان فراخوانی routeها در WEB، (مثلا localhost:3000/courses) تعداد 2 رکورد مثل هم ثبت میشه. در زیر کد ماژول و نمونه رکورد رو قرار میدم. ببخشید که سوال طولانی شد.لطفا راهنمایی کنید.

const autoBind = require("auto-bind");
const RequestLog = require('./../../models/requestLog');
const User = require('./../../models/user');

module.exports = new class requestLogHandler {
  constructor() {
    autoBind(this);
  }

  getClientIP(req, res, next) {
    let ip = req.header('x-forwarded-for') || req.connection.remoteAddress;
    return ip;
  }

  checkUrl(reqUrl) {
    let array = ['ckeditor', 'css', 'download', 'js', 'uploads', 'fonts', 'favicon'];
    for (let index = 0; index < array.length; index++) {
      const element = array[index];
      if (reqUrl.includes(element)) {
        return false;
      }
    }
    return true;
  }

  async saveLog(req, logedUser) {
    let newLog = new RequestLog({
      ip: this.getClientIP(req),
      url: req.url,
      user: logedUser,
      method: req.method
    });
    await newLog.save();
  }

  findUserFromToken(req) {
    let payLoad = (req.query.api_token).split('.')[1];
    let buffer = new Buffer(payLoad, 'base64');
    let data = JSON.parse(buffer.toString('ascii'));
    return data;
  }

  async setRequestLog(req, res, next) {
    try {
      let logedUser;

      if (req.query.api_token) {
        let data = this.findUserFromToken(req);
        logedUser = await User.findById(data.id);
        await this.saveLog(req, logedUser);
      }

      else {

        if (this.checkUrl(req.url)) {

          if (req.user) {
            logedUser = await User.findById(req.user.id);
          }

          await this.saveLog(req, logedUser);
        }

      }
      next();
    } catch (err) {
      res.json('security issue');
      next(err);
    }
  }
}
{
    "_id" : ObjectId("5dacbb1f8f90bb2890bd81ab"),
    "ip" : "::1",
    "url" : "/",
    "user" : ObjectId("5da4161c6f8877350c39e05b"),
    "method" : "GET",
    "createdAt" : ISODate("2019-10-20T19:53:03.918Z"),
    "updatedAt" : ISODate("2019-10-20T19:53:03.918Z"),
    "__v" : 0
}
{
    "_id" : ObjectId("5dacbb1f8f90bb2890bd81ac"),
    "ip" : "::1",
    "url" : "/",
    "user" : ObjectId("5da4161c6f8877350c39e05b"),
    "method" : "GET",
    "createdAt" : ISODate("2019-10-20T19:53:03.926Z"),
    "updatedAt" : ISODate("2019-10-20T19:53:03.926Z"),
    "__v" : 0
}
آفلاین
user-avatar
حسام موسوی
10 ماه پیش

روی سرور هم تست کردید که آیا دوبار تکرار میشه یا خیر ؟! گاهی اوقات روی لوکال همین میشه

آفلاین
user-avatar

سلام مجدد
خیر روی سرور چک نکردم. پس از نظر شما کد اشکالی نداره؟

آفلاین
user-avatar
حسام موسوی
10 ماه پیش

فکر نکنم چون خودم این داستانو نداشتم به غیر اینکه شما در چندجا اینو لود کنید ! در غیر این صورت منطقی نیست !
ولی روی سرور هم تست کنید

آفلاین
user-avatar
fateme
1 سال پیش

سلام.
دوره مشابه برای ری اکت هم دارید ؟

آفلاین
user-avatar
حسام موسوی
1 سال پیش

سلام یعنی چی دوره مشابه ؟ مشابه چی برای reactjs ؟

آفلاین
user-avatar
fateme
1 سال پیش

بله ، برای reactjs
به تازگی شروع به یادگیریش کردم

آفلاین
user-avatar
حسام موسوی
1 سال پیش

در reactjs شما اینکارای که تو این دوره گفتیم رو انجام نمیدید .
node سمت سرور react سمت کاربر فقط ظاهر سایت رو وظیفه داره ایجاد کنه

آفلاین
user-avatar
Mahdi Kazemzade
1 سال پیش

سلام استاد
میخوام بدونم که وقتی یه اطلاعاتی مثل اطلاعات فرم رو با axios برای یک آدرس میفرستم اونو تو سرور چطوری میتونم دریافت کنم؟

آفلاین
user-avatar
حسام موسوی
1 سال پیش

سلام چه شکلی یه فرم ایجاد میکنید و اطلاعاتش رو به یک روت میفرستید اینم همونه

آفلاین
user-avatar
majid
1 سال پیش

سلام خسته نباشید.راستش من دقیقا نمیدونم چرا در متد login از req.logInاستفاده کردین ؟من آموزش ساخت api رو هم دیدم در اونجا اصلا همچین چیزی نبود و فقط یک توکن بازگشت داده میشد.ممنون میشم بفرمایید که دلیل وجود req.logInدر اینجا چیه ؟و یه سوال دیگه الان من میخوام عملیات register رو هم انجام بدم و میخوام همزمان با register لاگین هم اتفاق بیافته و توکن رو بهم بده آیا میشه مثل عملیات login از passport استفاده نکنم و فقط از خود jwt استفاده کنم و چطور ؟یا اگه بخوام مثل عملیات login از passport استفاده کنم چطور میتونم تکراری بودن یک ایمیل رو برای ثبت نام چک کنم ؟ ممنون میشم راهنماییم کنین

آفلاین
user-avatar
حسام موسوی
1 سال پیش

سلام این req.logIn که میفرمایید دقیقا در کدوم قسمت قرار داره .
در صفحه register شما میتونید لاگین هم داشته باشید که بهتون نشون هم دادیم چطور فراخونی لاگین و عضویت رو انجام بدید

آفلاین
user-avatar
محمدرضا
2 سال پیش

اقای موسوی چجوری token بسازم که مدت خیلی خیلی زیادی اعتبار داشته باشه مثلا سایت خودتون من وقتی یه بار لاگین میکنم دیگه همیشه لاگین هستم ولی لازم نیست دوباره وارد بشم

آفلاین
user-avatar
حسام موسوی
2 سال پیش

timelife یک token رو بالا میبرید در روش jwt همین

آفلاین
user-avatar
ageekmaster
2 سال پیش

یک سوال
چرا داخل authenticateAPi.js بعد از فراخونی passport authenticate مجددا متود رو فراخونی کردید؟
دوباره () اجرا شده

آفلاین
user-avatar
حسام موسوی
2 سال پیش

دقیقا در کدوم قسمت ؟

آفلاین
user-avatar
محمد
2 سال پیش

در دوره های بعدی هم با react redux فرانت اند همین آموزش را برگزار می کنید؟

آفلاین
user-avatar
حسام موسوی
2 سال پیش

سلام بله تقریبا

آفلاین
user-avatar
محمدرضا عرفانی
2 سال پیش

در آتنتیکیشن از نوع jwt اگر بخوایم یک یوزر رو قبل از اینکه توکنش اکسپایر بشه، غیر فعال کنیم چطوری میشه؟

آفلاین
user-avatar
حسام موسوی
2 سال پیش

از چه نظر غیر فعال
اگر از نظر دسترسی بصورت کلی منظورتونه میتونید در دتیابیس یک فیلد بهش اختصاص بدید هر زمان که jwt صحیح بود و اطلاعات user هم برگشت چک کنید که اون فیلد true هست یا نه که در اون صورت میتونید اینکارو انجام بدید

آفلاین
user-avatar
محمدرضا عرفانی
2 سال پیش

ممنون از شما به خاطر آموزش خوبتون
یک سوالی که ذهنمو مشغول کرده اینه که چرا برای استفاده از jsonwebtoken، از passport استفاده کردید؟

منظورم اینه که خود کتابخانه ی jsonwebtoken دارای متد verify هست که با اون میشه توکن رو اعتبار سنجی کرد.

آیا لزومی به استفاده از passport بود؟
یا میشه بدون کتابخانه ی passport-jwt هم کار کرد؟

آفلاین
user-avatar
حسام موسوی
2 سال پیش

اگر دوره ساخت restful api با Nodejs رو دیده باشید ما تماما از jsonwebtoken استفاده کردیم ولی چون اینجا پروژه امونو با passport بالا آوردیم بخش اعتبارسنجیش رو هم با اون انجام میدیم چون شاید یجورایی از کارمون کم تر میکنه
اما اگر تا الان متوجه شده باشید با 10 راه میشه یکارو انجام داد و دست شما در این مورد بازه و میتونید هر کار دوست دارید برای ایجاد یه اپلیکیشن در nodejs انجام بدید