কৌণিকালীর canLoad এবং canActivate এর মধ্যে পার্থক্য?


100

মধ্যে পার্থক্য কি canLoadএবং canActivate?

export interface Route {
  path?: string;
  pathMatch?: string;
  matcher?: UrlMatcher;
  component?: Type<any>;
  redirectTo?: string;
  outlet?: string;
  canActivate?: any[];
  canActivateChild?: any[];
  canDeactivate?: any[];
  canLoad?: any[];
  data?: Data;
  resolve?: ResolveData;
  children?: Routes;
  loadChildren?: LoadChildren;
}

আমি তাদের মধ্যে কোনটি করা উচিত?

উত্তর:


99

ক্যানএ্যাকটিভেট অননুমোদিত ব্যবহারকারীদের নির্দিষ্ট কয়েকটি রুট অ্যাক্সেস করা থেকে বিরত রাখতে ব্যবহৃত হয়। আরও তথ্যের জন্য ডক্স দেখুন

canLoad সমগ্র মডিউল প্রখর রৌদ্রে লোড তাহলে ব্যবহারকারী তা করার অনুমোদন দেওয়া হয়নি থেকে আবেদন প্রতিরোধ করতে ব্যবহৃত হয়।

আরও তথ্যের জন্য নীচে ডক্স এবং উদাহরণ দেখুন See

{
    path: 'admin',
    loadChildren: 'app/admin/admin.module#AdminModule',
    canLoad: [AuthGuard]
},

এই কোডের সাহায্যে অ্যাডমিনমডুলের কোডটি কেবলমাত্র অ্যাপলগে লোড হবে যদি অথগুয়ার্ড ফিরে আসে true

যদি ব্যবহারকারী এই রুটটি অ্যাক্সেস করার অনুমতিপ্রাপ্ত না হন এবং আমরা কেবল কোনও canActivateপ্রহরী ব্যবহার করতাম AdminModuleতবে ব্যবহারকারী সেই রুটটি অ্যাক্সেস করতে সক্ষম না হলেও, লোড করা হবে।


6
আমি canActivateযদি উপরের দৃশ্যে ব্যবহার করি তবে পার্থক্য কী হবে?
k11k2

4
@ k11k2 canActiveমডিউল সহ লোড করা হবে (এফ 12> উত্স - ক্রোমে)। আপনি সেখানে .js ফাইলগুলি দেখতে পারেন these canLoadএই মডিউলগুলির সাথে (ফাইল .js) লোড হবে না :) উপরে আমার উত্তরটি পরীক্ষা করুন যেখানে আমি এটি আরও ভালভাবে ব্যাখ্যা করেছি
ডাইপিক্স

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

4
@ ব্যবহারকারীরা লগ আউট করে আবার কোনও অ্যাকাউন্টে অ্যাডমিনমডুল বোঝা রাখার পর্যাপ্ত অনুমতি না পাওয়ায় আবার সাইন-ইন করে, অলস অ্যাডমিনমডুলের আগের লোড হওয়া অংশটিকে সরানোর জন্য কীর্তিভাসান কিছুই জোর করে না। তবে, আপনি যেভাবেই অ্যাক্সেস পাবেন না .. লোড হওয়া ক্যাশেড মডিউল ব্যতীত। আমি মনে করি না যে এটি একটি আসল সুরক্ষার সমস্যা কারণ সাধারণত একটি ডিভাইসই একজন প্রকৃত ব্যবহারকারী
হ্যাস্ট্রব

4
@ sgClaudia98 আপনি উভয়ই ব্যবহার করতে পারেন তবে গার্ডদের ফাঁসি কার্যকর করার জন্য কঠোর আদেশ রয়েছে। এই কারণেই আমি সামান্য আগে আমি যা বলেছিলাম তা সম্পর্কিত এটি আপনার ক্ষেত্রে কোনও পার্থক্য রাখে না। আমার মনে হয় আমি আমার প্রথম মন্তব্যে খুব বিস্তারিত ব্যাখ্যা রেখেছি। আজকাল যদি কোনও ডিভাইস এবং অ্যাডমিন / অ্যাডমিন লগ-ইন না করে থাকে তবে এটি বেশ আশ্চর্যজনক বিষয় হবে।

36
  • ক্যান অ্যাক্টিভেট - কোনও রুট সক্রিয় করা যায় কিনা তা স্থির করে, এই গার্ডটি অলস লোড হওয়া বৈশিষ্ট্য মডিউলগুলির পক্ষে সেরা উপায় নাও হতে পারে, কারণ এই প্রহরী সর্বদা মেমোরিতে মডিউলটি লোড করবে, এমনকি যদি গার্ডটি মিথ্যা ফেরত দেয় যার অর্থ ব্যবহারকারী অ্যাক্সেসের জন্য অনুমোদিত নয় if পথ.
  • CanLoad - মডিউলটি অলসভাবে লোড করা যায় কিনা তা স্থির করে, কোনও রুট এমনকি লোড করা যায় কিনা তা নিয়ন্ত্রণ করে। এটি আলস্য বোঝা এমন বৈশিষ্ট্য মডিউলগুলির জন্য দরকারী হয়ে ওঠে। এমনকি প্রহরী মিথ্যা ফেরত দিলে তারা লোডও করবে না।

এটি এমন একটি পরীক্ষা যা আমি উভয় প্রহরীকে একটি বৈশিষ্ট্য মডিউল দিয়ে তৈরি করেছিলাম যা অলস বোঝাই:

1. CanActivate গার্ড পরীক্ষা

আপনি নেটওয়ার্ক পৃষ্ঠার নীচে লক্ষ্য করবেন যে এটি 9.5 মেগাবাইটের আকারের 24 অনুরোধগুলি 3.34 সেকেন্ডের মধ্যে শেষ করে স্থানান্তরিত করেছে এবং পুরো 3.32 সেকেন্ডে লোড হয়েছে।

অলস লোড বৈশিষ্ট্য মডিউল অন গার্ড টেস্ট CanAcateate

1. CanLoad গার্ড পরীক্ষা

এখানে আপনি বড় পার্থক্য দেখতে পাবেন যখন আমরা ক্যানলড গার্ডকে 9.4 এমবি আকারের ব্রাউজার হিসাবে কেবলমাত্র 18 টি অনুরোধগুলি 2.64 সেকেন্ডে ফিনিশিং ফিনিশিং এবং 2.5-2 সেকেন্ডে পুরোপুরি লোড হিসাবে ব্যবহার করি।

অলস লোড বৈশিষ্ট্য মডিউল অন ক্যানলয়েড গার্ড পরীক্ষা

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

টিপ: যদি আপনি আপনার প্রকল্পে পরীক্ষা করতে চান তা নিশ্চিত করে নিন যে Disable Cacheনেটওয়ার্ক ট্যাবে চেকবক্সটি চেক করা আছে, এটি প্রথম ছবিতে চিহ্নিত আছে


4
কাউকে বিভ্রান্ত করার জন্যই নয় .. 403 হ'ল ফোরবিডেন, অননুমোদিত যা 401.
হস্টব্রব

20

অন্যান্য পোস্টে মন্তব্য থেকে প্রশ্ন সম্পর্কে "যদি আমি উপরের দৃশ্যে ক্যানএ্যাকটিভেট ব্যবহার করি তবে পার্থক্য কী হবে?"

আসলে ব্যবহারকারীর জন্য কোনও পার্থক্য থাকবে না, তিনি উভয় ক্ষেত্রেই পৃষ্ঠায় কোনও অ্যাক্সেস পাবেন না get যদিও একটি লুকানো পার্থক্য আছে । আপনি যদি F12 টিপেন এবং উত্সগুলিতে যান (ক্রোমে) যেখানে ডাউনলোড ফাইল আছে। তারপরে আপনি দেখতে পাচ্ছেন যে কোড সহ ক্যানএ্যাকটিভ ফাইল ডাউনলোড হয়েছে ( chunk.js )। এমনকি আপনার পৃষ্ঠাটিতে অ্যাক্সেস না থাকলেও। এখানে চিত্র বর্ণনা লিখুন

তবে ক্যানলডের ক্ষেত্রে সোর্স কোডের সাথে কোনও শঙ্ক.জেএস ফাইল থাকবে না ।

এখানে চিত্র বর্ণনা লিখুন

সুতরাং আপনি দেখতে পাচ্ছেন এটি সুরক্ষার জন্য সত্যই বড় প্রভাব ফেলবে।

এবং অবশ্যই ভুলে যাবেন না যে ল্যানড কেবলমাত্র লাজিলেডেড মডিউলগুলির জন্য ব্যবহার করা যেতে পারে ।


4
আমার নেটওয়ার্ক ট্যাবে অলস লোডিং মডিউলটির জন্য কোনও অংশ দেখতে অক্ষম তবে প্রত্যাশাগুলি অনুসারে কাজ করা রুটগুলি আমি কীভাবে আমার মডিউলগুলির চাহিদা পূরণের বিষয়টি নিশ্চিত করব বা করব না?
11 কে 2

@ k11k2 যদি আপনি কোন ফাইলটি কোনও মডিউল অংশ হিসাবে দেখতে চান তবে কেবলমাত্র debugger;সেই মডিউলের কোনও উপাদানগুলির জন্য কনস্ট্রাক্টরে একটি বিবৃতি যুক্ত করুন । এরপরে আপনি দেখতে পাচ্ছেন যে এটি কোনও পৃথক অংশ হিসাবে লোড করা হয়েছে বা মূল হিসাবে কোনও মডিউলে অন্তর্ভুক্ত ছিল। আপনার যদি অলস মডিউলের উপাদানগুলির উল্লেখ থাকে যা সেই মডিউলের সাথে বিচ্ছিন্ন না হয় তবে এটি কোনওভাবেই লোড হতে পারে। আপনি যদি এটি দেখতে পান তবে আপনি জেএস ফাইল ব্যতীত অন্য কোনও দ্বারা ফিল্টার করছেন, বা আপনার অলস মডিউলটি সাধারণ এবং 'সত্যই অলস' অংশে বিভক্ত করা উচিত।
সাইমন_উইভার

@ k11k2 আমি মনে করি আপনার "অলস লোডিং মডিউল" আলস্যভাবে লোড হচ্ছে না। loadChildrenআপনার অলস মডিউলটির পথ হিসাবে আপনি সম্পত্তিটি ব্যবহার করেছেন তা নিশ্চিত করুন ।
হ্যাশট্রব

16

canActivate অননুমোদিত ব্যবহারকারীকে রোধ করতে ব্যবহৃত হয়

canLoadঅ্যাপ্লিকেশনটির পুরো মডিউলটি রোধ করতে ব্যবহার করা হয়

ক্যানএ্যাকটিভেটের উদাহরণ :

{ path: 'product',canActivate:[RouteGaurd], component : ProductComponent }

CanLoad উদাহরণ :

{ path: 'user' , canLoad: [AuthenticGuard], loadChildren : './user/user.module#UserModule' }

ভবিষ্যতে পাঠকদের জন্য, canActive উদাহরণ অলস নয়, কিন্তু canLoad .. হয় কারণে হচ্ছে loadChildren। তদুপরি, loadChildren: () => import('./user/user.module').then(m => m.UserModule)
কৌণিকের

খুব সাধারণ ব্যাখ্যা, এটি পছন্দ হয়েছে :)
কেটিএম

16

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

কৌণিক canActivate সরবরাহ করে গার্ড সরবরাহ করে, যা অননুমোদিত ব্যবহারকারীকে রুটে অ্যাক্সেস করা থেকে বাধা দেয়। তবে এটি মডিউলটি ডাউনলোড হতে বাধা দেয় না। ব্যবহারকারী উত্স কোডটি দেখতে ক্রোম বিকাশকারী কনসোল ব্যবহার করতে পারেন। CanLoad গার্ড মডিউলটি ডাউনলোড হতে বাধা দেয়।

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

অ্যাডমিনমডুল লোড করার আগে CanLoad ব্যবহার করুন :

  {
        path: 'admin',
        loadChildren: 'app/admin/admin.module#AdminModule',
        canLoad: [ AuthGuardService ]
      },

অ্যাডমিনমডুল লোড করার পরে, অ্যাডমিনআউটিং মডিউলে আমরা ক্যানএ্যাকটিভকে অননুমোদিত ব্যবহারকারীর কাছ থেকে বাচ্চাদের রক্ষা করতে ব্যবহার করতে পারি :

{ 
      path: '',
      component: AdminComponent,
      children: [ 
        {
          path: 'person-list',
          component: PersonListComponent,
          canActivate: [ AuthGuardService ]
        }
      ]
    }  

সুতরাং একজনের ক্যানলড এবং ক্যানএ্যাকটিভেট উভয়ই ব্যবহার করা উচিত?
তারিদা জর্জ

0

অননুমোদিত ব্যবহারকারী এখনও সেই মডিউলটি লোড করে যদি canAcateate । আপনার বোঝা চাপানো দরকার কিনা রায় অর্জনের জন্য আপনার ক্যানলড প্রয়োজন ।


0

ক্যানলোড কাউকে আপনার উত্স কোড পেতে বাধা দেবে না তা লক্ষ করা গুরুত্বপূর্ণ । .Js ব্রাউজার দ্বারা ডাউনলোড করা হবে না যদি না ব্যবহারকারী অনুমোদিত হয় তবে আপনি ব্রাউজার কনসোলে একটি আমদানি ('./ xxxxx.js') জারি করে একটি ম্যানুয়াল ডাউনলোডকে বাধ্য করতে পারেন।

আপনার রুটের সংজ্ঞা অনুসারে মডিউলটির নাম আপনার মেইন.জে খুব সহজেই পাওয়া যাবে।

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