AngularJS: একক পৃষ্ঠা অ্যাপ্লিকেশনটিতে প্রমাণীকরণ ব্যবহারের প্রাথমিক উদাহরণ


101

আমি অ্যাঙ্গুলারজেএস- এ নতুন এবং তাদের টিউটোরিয়ালটি পেরিয়েছি এবং এটির জন্য অনুভূতি পেয়েছি।

আমার প্রজেক্টটি প্রস্তুত করার জন্য আমার একটি ব্যাকএন্ড রয়েছে যেখানে RESTশেষের প্রতিটি পয়েন্টকে প্রমাণীকরণ করা দরকার।

কি আমি চাই না
একটি।) আমি আমার প্রকল্পের জন্য একটি পৃষ্ঠার করতে চান http://myproject.com
খ।) একবার ব্যবহারকারী কোনও ব্রাউজারে ইউআরএল হিট করে, যদি ব্যবহারকারী লগইন হয় বা না থাকে তার উপর ভিত্তি করে, তাকে একই পৃষ্ঠাটির আওতায় হোম পেজ / ভিউ বা লগইন পৃষ্ঠা / ভিউ উপস্থাপন করা হয় http://myproject.com
গ।) যদি কোনও ব্যবহারকারী লগইন না করে থাকে তবে এটি ফর্মটি পূরণ করে এবং সার্ভারটি একটি USER_TOKENসেশনে সেট করে , সুতরাং শেষ পয়েন্টগুলিতে সমস্ত অনুরোধের ভিত্তিতে প্রমাণীকরণ করা হবেUSER_TOKEN

আমার বিভ্রান্তি
ক।) আমি কীভাবে অ্যাঙ্গুলারজেএস ব্যবহার করে ক্লায়েন্ট-সাইড প্রমাণীকরণটি পরিচালনা করতে পারি? আমি এখানে এবং এখানে দেখেছি কিন্তু সেগুলি কীভাবে ব্যবহার করব তা বুঝতে পারিনি
খ।) যদি ব্যবহারকারী একই ইউআরএল-এর অধীনে লগ ইন থাকে বা না থাকে তার ভিত্তিতে আমি কীভাবে ব্যবহারকারীর কাছে বিভিন্ন মতামত উপস্থাপন করতে পারিhttp://myproject.com

আমি প্রথমবারের জন্য কৌণিক.জেএস ব্যবহার করছি এবং কীভাবে শুরু করব সে সম্পর্কে সত্যিই বিভ্রান্ত হয়ে পড়ছি। যে কোনও পরামর্শ এবং / বা সংস্থানগুলি খুব প্রশংসা করা হয়।


দয়া করে নিবন্ধ নিচে কটাক্ষপাত আছে frederiknakstad.com/...
অজয় বেনিওয়াল

4
@ মিশেলক্যালকিনস কেবল একটি লিঙ্ক স্থাপন করা গঠনমূলক নয়। লিঙ্কটি কী সরবরাহ করছে তা আপনার কমপক্ষে বলা উচিত।
ডেভ গর্ডন


ওআউথের টিমের এই andreareginato.github.io/oauth-ng
ফ্যাক্টর 10

উত্তর:


48

আমি এই নিবন্ধটি মূলত সংক্ষেপে একটি গিথুব রেপো তৈরি করেছি: https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec

এনজি-লগইন গিথুব রেপো

প্লাঙ্কার

আমি যথাসম্ভব যথাযথভাবে ব্যাখ্যা করার চেষ্টা করব, আশা করি আমি আপনার কয়েকজনকে সেখানে সাহায্য করব:

(1) app.js: অ্যাপ সংজ্ঞা অনুসারে প্রমাণীকরণের ধ্রুবক তৈরি করা

var loginApp = angular.module('loginApp', ['ui.router', 'ui.bootstrap'])
/*Constants regarding user login defined here*/
.constant('USER_ROLES', {
    all : '*',
    admin : 'admin',
    editor : 'editor',
    guest : 'guest'
}).constant('AUTH_EVENTS', {
    loginSuccess : 'auth-login-success',
    loginFailed : 'auth-login-failed',
    logoutSuccess : 'auth-logout-success',
    sessionTimeout : 'auth-session-timeout',
    notAuthenticated : 'auth-not-authenticated',
    notAuthorized : 'auth-not-authorized'
})

(2) অথথ পরিষেবা: নিম্নলিখিত সমস্ত ফাংশন auth.js পরিষেবাতে প্রয়োগ করা হয়। প্রমাণীকরণ পদ্ধতির জন্য সার্ভারের সাথে যোগাযোগ করার জন্য The http পরিষেবাটি ব্যবহৃত হয়। অনুমোদনের উপর ফাংশনগুলিও রয়েছে, এটি হ'ল যদি ব্যবহারকারীকে কোনও নির্দিষ্ট ক্রিয়া সম্পাদনের অনুমতি দেওয়া হয়।

angular.module('loginApp')
.factory('Auth', [ '$http', '$rootScope', '$window', 'Session', 'AUTH_EVENTS', 
function($http, $rootScope, $window, Session, AUTH_EVENTS) {

authService.login() = [...]
authService.isAuthenticated() = [...]
authService.isAuthorized() = [...]
authService.logout() = [...]

return authService;
} ]);

(3) সেশন: ব্যবহারকারীর তথ্য রাখার জন্য একটি সিঙ্গলটন ton এখানে বাস্তবায়ন আপনার উপর নির্ভর করে।

angular.module('loginApp').service('Session', function($rootScope, USER_ROLES) {

    this.create = function(user) {
        this.user = user;
        this.userRole = user.userRole;
    };
    this.destroy = function() {
        this.user = null;
        this.userRole = null;
    };
    return this;
});

(4) পিতা বা মাতা নিয়ামক: এটিকে আপনার অ্যাপ্লিকেশনটির "প্রধান" ফাংশন হিসাবে বিবেচনা করুন, সমস্ত নিয়ামকরা এই নিয়ামকের কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় এবং এটি এই অ্যাপ্লিকেশনটির প্রমাণীকরণের মেরুদন্ডী।

<body ng-controller="ParentController">
[...]
</body>

(5) অ্যাক্সেস নিয়ন্ত্রণ: নির্দিষ্ট রুটে অ্যাক্সেস অস্বীকার করতে 2 টি পদক্ষেপ প্রয়োগ করতে হবে:

ক) ইউই রাউটারের P রাজ্যপ্রাইডার পরিষেবাটিতে প্রতিটি রুটে অ্যাক্সেসের জন্য অনুমোদিত ভূমিকার ডেটা যুক্ত করুন (নীচে দেখা যাবে) (এনজিআরটে একই কাজ করতে পারে)।

.config(function ($stateProvider, USER_ROLES) {
  $stateProvider.state('dashboard', {
    url: '/dashboard',
    templateUrl: 'dashboard/index.html',
    data: {
      authorizedRoles: [USER_ROLES.admin, USER_ROLES.editor]
    }
  });
})

খ) $ রুটস্কোপ। $ অন ('$ stateChangeStart') ব্যবহারকারীর অনুমোদিত না হলে রাষ্ট্র পরিবর্তন রোধ করতে ফাংশন যুক্ত করুন।

$rootScope.$on('$stateChangeStart', function (event, next) {
    var authorizedRoles = next.data.authorizedRoles;
    if (!Auth.isAuthorized(authorizedRoles)) {
      event.preventDefault();
      if (Auth.isAuthenticated()) {
        // user is not allowed
        $rootScope.$broadcast(AUTH_EVENTS.notAuthorized);
      } else {
        // user is not logged in
        $rootScope.$broadcast(AUTH_EVENTS.notAuthenticated);
      }
    }
});

()) অথথ ইন্টারসেপ্টার: এটি প্রয়োগ করা হয়েছে, তবে এই কোডের সুযোগটি পরীক্ষা করা যায় না। প্রতিটি $ HTTP অনুরোধের পরে, এই ইন্টারসেপ্টার স্থিতি কোডটি পরীক্ষা করে, নীচের কোনওটি যদি ফিরে আসে তবে তা ব্যবহারকারীকে আবার লগ-ইন করতে বাধ্য করার জন্য একটি ইভেন্ট সম্প্রচার করে।

angular.module('loginApp')
.factory('AuthInterceptor', [ '$rootScope', '$q', 'Session', 'AUTH_EVENTS',
function($rootScope, $q, Session, AUTH_EVENTS) {
    return {
        responseError : function(response) {
            $rootScope.$broadcast({
                401 : AUTH_EVENTS.notAuthenticated,
                403 : AUTH_EVENTS.notAuthorized,
                419 : AUTH_EVENTS.sessionTimeout,
                440 : AUTH_EVENTS.sessionTimeout
            }[response.status], response);
            return $q.reject(response);
        }
    };
} ]);

1 ম নিবন্ধে উল্লিখিত ফর্ম ডেটা অটোফিল সহ পিএস একটি বাগটি ডিরেক্টরেটিজ.জেএস-এ অন্তর্ভুক্ত থাকা নির্দেশকে যুক্ত করে সহজেই এড়ানো যায়।

PS2 এই কোডটি ব্যবহারকারীর দ্বারা সহজেই বিভিন্নভাবে চিহ্নিত করা যায়, বিভিন্ন রুট দেখা যায় না বা প্রদর্শিত সামগ্রী বোঝানো যায় না এমন সামগ্রী প্রদর্শন করা যায়। যুক্তিটি সার্ভার-সাইড প্রয়োগ করা উচিত, এটি আপনার এনজি-অ্যাপে জিনিসগুলি সঠিকভাবে প্রদর্শন করার এক উপায়।


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

~~ নিশ্চিত না যে আমি সেই লাইনটি সঠিকভাবে বুঝতে পেরেছি: authService.login() = [...]square বর্গাকার বন্ধনীগুলি এমন কিছুর জন্য দাঁড়াবে $http.get(url, {uID, pwd}? ~~ ঠিক আছে, প্লাঙ্কারের দিকে তাকাল, এটি আমি বলেছিলাম এক্সডি
নেটালেক্স

4
আপনি সার্ভার পক্ষের জন্য আপনার উত্তর প্রসারিত করতে পারেন?
ক্যোয়ারী

25

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

আমার সর্বশেষ অ্যাপ্লিকেশনটিতে আমার 'কৌশল' হ'ল ক্লায়েন্টটি আথের যত্ন করে না। অ্যাপ্লিকেশানের প্রতিটি একক জিনিসের জন্য প্রথমে লগইন প্রয়োজন, সুতরাং কোনও বিদ্যমান ব্যবহারকারী সেশনে সনাক্ত না করা পর্যন্ত সার্ভারটি সর্বদা লগইন পৃষ্ঠা পরিবেশন করে। যদি সেশন.ইউজারটি পাওয়া যায় তবে সার্ভারটি কেবল সূচিপত্র HTML পাঠায় t বাম: -ও

"অ্যান্ড্রু জোসলিন" এর মন্তব্যটি দেখুন।

https://groups.google.com/forum/?fromgroups=#!searchin/angular/authentication/angular/POXLTi_JUgg/VwStpoWCPUQJ


4
যদি এটি একটি ওয়েব এপিআই? আমি আপনার উত্তরটি পাইনি অনুমান করি :(
লেয়ানড্রো ডি মেলো ফাগুন্দেস

4
আপনি যদি ব্যবহারকারীর নামটি প্রদর্শন করতে চান? অথবা আপনি যদি শেষ পয়েন্ট URL গুলিতে ব্যবহারকারীর নাম সহ কোনও পরিষেবাতে কথা বলছেন?
পেরিজিও

4
দুঃখিত, তবে আমি উত্তরটি বুঝতে পারি না। আপনি কিভাবে কৌণিকভাবে অধিবেশন পরিচালনা করবেন? সেশন.ইউসার কোথায় সেট করা আছে? আপনি কি দয়া করে এর একটি কোড উদাহরণ তৈরি করতে পারেন? তোমাকে ধন্যবাদ
ফ্রাসোয়া রোমাঁ

4
সেশনগুলি ক্লায়েন্ট এন্ডে পরিচালিত হয় এবং সার্ভারের দিকে নয়, ক্লায়েন্ট টোকেন সংরক্ষণ করে এবং প্রতিটি অনুরোধের অংশ হিসাবে এটি প্রেরণ করে। সার্ভারটি টোকেনকে বৈধতা দেয় এবং অনুরোধটি প্রক্রিয়াকরণ করে
ডেড্রিমার

4
যে কেউ এটি বোঝে তা কি আমাদের বাকীদের জন্য এই উত্তরটি সম্পাদনা করতে পারেন?
আলাজ জানেজ

14

আমি এখানে অনুরূপ প্রশ্নের উত্তর দিয়েছি: AngularJS Authentication + RESTful API


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

আপনি হয়:

  1. মডিউলটি সংশোধন করুন এবং এটি আপনার নিজের API এ সংযুক্ত করুন, বা or
  2. ব্যবহারকারী অ্যাপ্লিকেশন (একটি ক্লাউড-ভিত্তিক ব্যবহারকারী পরিচালন এপিআই) এর সাথে মডিউলটি একসাথে ব্যবহার করুন

https://github.com/userapp-io/userapp-angular

আপনি যদি ইউজার অ্যাপ ব্যবহার করেন তবে আপনাকে ব্যবহারকারীর স্টাফের জন্য কোনও সার্ভার-সাইড কোড লিখতে হবে না (একটি টোকেন যাচাই করার চেয়ে বেশি)। নিন Codecademy উপর কোর্স এটি ব্যবহার করে দেখতে।

এটি কীভাবে কাজ করে তার কয়েকটি উদাহরণ:

  • কোন রুটগুলি সর্বজনীন হতে হবে এবং লগইন ফর্মটি কোন রুটে তা নির্দিষ্ট করবেন:

    $routeProvider.when('/login', {templateUrl: 'partials/login.html', public: true, login: true});
    $routeProvider.when('/signup', {templateUrl: 'partials/signup.html', public: true});
    $routeProvider.when('/home', {templateUrl: 'partials/home.html'});
    

    .otherwise()রুট আপনি যেখানে চান আপনার ব্যবহারকারীদের লগইন করার পরে আপনাকে পুনঃনির্দেশিত করা এ সেট করা উচিত। উদাহরণ:

    $routeProvider.otherwise({redirectTo: '/home'});

  • ত্রুটি পরিচালনার সাথে লগইন ফর্ম:

    <form ua-login ua-error="error-msg">
        <input name="login" placeholder="Username"><br>
        <input name="password" placeholder="Password" type="password"><br>
        <button type="submit">Log in</button>
        <p id="error-msg"></p>
    </form>
    
  • ত্রুটি পরিচালনার সাথে সাইনআপ ফর্ম:

    <form ua-signup ua-error="error-msg">
      <input name="first_name" placeholder="Your name"><br>
      <input name="login" ua-is-email placeholder="Email"><br>
      <input name="password" placeholder="Password" type="password"><br>
      <button type="submit">Create account</button>
      <p id="error-msg"></p>
    </form>
    
  • লগ আউট লিঙ্ক:

    <a href="#" ua-logout>Log Out</a>

    (সেশনের সমাপ্তি এবং লগইন রুটে পুনঃনির্দেশ)

  • ব্যবহারকারীর বৈশিষ্ট্য অ্যাক্সেস করুন:

    ব্যবহারকারীর বৈশিষ্ট্যগুলি userপরিষেবাটি ব্যবহার করে অ্যাক্সেস করা হয় , যেমন:user.current.email

    বা টেমপ্লেটে: <span>{{ user.email }}</span>

  • লগ ইন করার সময় কেবল দৃশ্যমান হওয়া উচিত এমন উপাদানগুলি লুকান:

    <div ng-show="user.authorized">Welcome {{ user.first_name }}!</div>

  • অনুমতিগুলির ভিত্তিতে একটি উপাদান দেখান:

    <div ua-has-permission="admin">You are an admin</div>

এবং আপনার ব্যাক-এন্ড পরিষেবাগুলিতে প্রমাণীকরণের জন্য, user.token()সেশন টোকেন পেতে এবং এজেএক্স অনুরোধের মাধ্যমে এটি প্রেরণ করুন। ব্যাক- এন্ডে, টোকেনটি বৈধ আছে কি না তা পরীক্ষা করতে ইউজার অ্যাপ্লিকেশন এপিআই (আপনি যদি ইউজার অ্যাপ ব্যবহার করেন) ব্যবহার করুন।

আপনার যদি কোনও সাহায্যের প্রয়োজন হয় তবে আমাকে জানান!


আমি কীভাবে "মডিউলটি সংশোধন করব এবং এটি আপনার নিজের API এ সংযুক্ত করব" ?
পিওফেরেরেট

2

Angularjs এ আপনি UI অংশ, পরিষেবা, নির্দেশাবলী এবং কৌনিক সংক্রান্ত সমস্ত অংশ তৈরি করতে পারেন যা UI প্রতিনিধিত্ব করে। এটি কাজ করার জন্য দুর্দান্ত প্রযুক্তি।

যে কেউ এই প্রযুক্তিতে নতুন হন এবং "ব্যবহারকারীর" প্রমাণীকরণ করতে চান তবে আমি সি # ওয়েব এপিআই এর শক্তি দিয়ে এটি করার পরামর্শ দিই। তার জন্য আপনি OAuth স্পেসিফিকেশন ব্যবহার করতে পারেন যা আপনাকে ব্যবহারকারীকে প্রমাণীকরণের জন্য একটি শক্তিশালী সুরক্ষা ব্যবস্থা তৈরি করতে সহায়তা করবে। একবার আপনি ওআউথ দিয়ে ওয়েবএপি তৈরি করার পরে আপনাকে সেই এপিআই টোকেনের জন্য কল করতে হবে:

var _login = function (loginData) {
 
        var data = "grant_type=password&username=" + loginData.userName + "&password=" + loginData.password;
 
        var deferred = $q.defer();
 
        $http.post(serviceBase + 'token', data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).success(function (response) {
 
            localStorageService.set('authorizationData', { token: response.access_token, userName: loginData.userName });
 
            _authentication.isAuth = true;
            _authentication.userName = loginData.userName;
 
            deferred.resolve(response);
 
        }).error(function (err, status) {
            _logOut();
            deferred.reject(err);
        });
 
        return deferred.promise;
 
    };
 

এবং একবার আপনি টোকেন পেয়ে গেলে আপনি টোকেনের সহায়তায় অ্যাঙ্গুলারগুলি থেকে সংস্থানগুলি অনুরোধ করেন এবং OAuth স্পেসিফিকেশন সহ ওয়েব অ্যাপি তে সুরক্ষিত থাকা সংস্থানটিতে অ্যাক্সেস করুন।

আরও সহায়তার জন্য দয়া করে নীচের নিবন্ধটি দেখুন: -

http://bitoftech.net/2014/06/09/angularjs-token-authentication- using-asp-net-web-api-2-owin-asp-net-identity/


1

আমি মনে করি যে প্রতিটি জেএসওএন প্রতিক্রিয়াতে একটি সম্পত্তি থাকা উচিত (যেমন: প্রমাণীকরণ: মিথ্যা}) এবং ক্লায়েন্টকে এটি প্রতিবার পরীক্ষা করতে হবে: যদি মিথ্যা হয় তবে কৌনিক নিয়ামক / পরিষেবা লগইন পৃষ্ঠায় "পুনর্নির্দেশ" করবে।

এবং যদি ব্যবহারকারী ডি জেএসনকে ধরে এবং বুলটিকে সত্যে পরিবর্তন করে তবে কী হবে?

আমি মনে করি এই ধরণের জিনিসগুলি করার জন্য আপনার কখনই ক্লায়েন্টের উপর নির্ভর করা উচিত নয়। যদি ব্যবহারকারী প্রমাণীকৃত না হয় তবে সার্ভারটি কেবল একটি লগইন / ত্রুটি পৃষ্ঠাতে পুনর্নির্দেশ করা উচিত।


4
এটি দেখুন: github.com/witoldsz/angular-http-auth - সার্ভারের প্রতিক্রিয়া স্থিতি কোডের জন্য ইন্টারসেপ্টার চেক করে এবং যদি এটি 403 ('লগইন প্রয়োজনীয়') থাকে তবে এটি কোনও ইভেন্ট সম্প্রচার করে, তাই আপনি এটি অ্যাপ্লিকেশনটিতে এবং লগইন বাক্সের ভিতরে প্রদর্শন করতে পারেন।
অ্যারোক

10
উত্তর ব্যবহার করে একে অপরের জবাব দেওয়া বন্ধ করুন। মন্তব্যে সেটাই!
সোভিয়েট

@ অ্যারোকের পরামর্শ, আপনার মন্তব্যটি একটি উত্তরে প্রচার করা উচিত, সময়মতো এটি শীর্ষে ভোট দেওয়া হবে। বাকীটি কেবল গোলমাল।
ব্যবহারকারী 237419

0

var _login = function (loginData) {
 
        var data = "grant_type=password&username=" + loginData.userName + "&password=" + loginData.password;
 
        var deferred = $q.defer();
 
        $http.post(serviceBase + 'token', data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).success(function (response) {
 
            localStorageService.set('authorizationData', { token: response.access_token, userName: loginData.userName });
 
            _authentication.isAuth = true;
            _authentication.userName = loginData.userName;
 
            deferred.resolve(response);
 
        }).error(function (err, status) {
            _logOut();
            deferred.reject(err);
        });
 
        return deferred.promise;
 
    };
 

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