AngularJS 認証のメソッド_AngularJS

May 16, 2016 pm 03:15 PM

最も一般的な権限の設計は、RBAC ロールベースのアクセス制御です。基本的な考え方は、システム操作のためのさまざまな権限が特定のユーザーに直接付与されるのではなく、ユーザー セットと権限セットの間にロール セットが確立されるというものです。各役割は、対応する権限のセットに対応します。

ユーザーに適切な役割が割り当てられると、ユーザーはこの役割に対するすべての操作権限を持ちます。この利点は、ユーザーを作成するたびに権限を割り当てる必要がなく、対応するロールをユーザーに割り当てるだけで済むことです。さらに、ロールの権限の変更はユーザーの権限の変更よりもはるかに少ないです。これにより、ユーザー権限の管理が簡素化され、システムのオーバーヘッドが軽減されます。

Angular で構築されたシングルページ アプリケーションでは、このようなアーキテクチャを実装するために追加の作業を行う必要があります。プロジェクト全体に関して、フロントエンド エンジニアが対処する必要がある箇所が 3 か所ほどあります。

1. UI 処理 (ユーザーが持つ権限に基づいてページ上の一部のコンテンツが表示されるかどうかを決定します)

2. ルーティング処理(アクセス権限のないURLにアクセスした場合、エラーページへジャンプ)

3. HTTP リクエストの処理 (データリクエストを送信すると、返されたステータスが 401 または 403 の場合、通常はエラー ページにリダイレクトされます)

クライアントでの認証に AngularJS を使用する場合は、サービス を使用することをお勧めします。サービスはシングルトンであり、すべてのビュー、コントローラー、ディレクティブ、フィルター、その他のサービスで簡単に使用できるためです。グローバル変数を公開せずにデータを保存でき、カプセル化も保証されます。

簡単な例:

1

2

3

4

5

6

7

services.factory('UserService', [function() {

var sdo = {

isLogged: false,

username: ''

};

return sdo;

}]);

ログイン後にコピー

AngularJS でのサービスの使用は、次のような依存関係宣言を通じて行われます。

1

2

3

4

var controllers = angular.module('myApp.controllers', []);

/* ... */

controllers.controller('loginController', ['$scope', '$http', 'UserService', function(scope, $http, User) {

}]);

ログイン後にコピー

このloginControllerでは、サーバーに対してユーザーのIDを認証するためのログイン関数を定義できます:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

scope.login = function() {

var config = { /* ... */ } // configuration object

$http(config)

.success(function(data, status, headers, config) {

if (data.status) {

// succefull login

User.isLogged = true;

User.username = data.username;

}

else {

User.isLogged = false;

User.username = '';

}

})

.error(function(data, status, headers, config) {

User.isLogged = false;

User.username = '';

});

}

ログイン後にコピー

次に、UserService に依存すると宣言されているコントローラー、ビュー、フィルターなどは、UserService.isLogged を使用して、ユーザーが検証済みユーザーであるか匿名ユーザーであるかを判断できます

AngularJS は通常、ページの分割と再編成にテンプレートを使用するため、routeProvider を使用して各ページのアクセス ルールを制御します。

1

2

3

4

5

app.config(['$routeProvider', function($routeProvider) {

$routeProvider.when('/login', { templateUrl: 'partials/login.html', controller: 'loginCtrl' , access: {isFree: true}});

$routeProvider.when('/main', { templateUrl: 'partials/main.html', controller: 'mainCtrl' });

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

}]);

ログイン後にコピー

login.html など、認証なしでアクセスできるページと、main.html など、ログインしたユーザーのみが表示できるページがあります。この時点で、一般的な checkUser ロジックを追加する必要があります。現在のユーザーは次のページを参照できます:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

directives.directive('checkUser', ['$rootScope', '$location', 'userSrv', function ($root, $location, userSrv) {

return {

link: function (scope, elem, attrs, ctrl) {

$root.$on('$routeChangeStart', function(event, currRoute, prevRoute){

if (!prevRoute.access.isFree && !userSrv.isLogged) {

// reload the login route

}

/*

* IMPORTANT:

* It's not difficult to fool the previous control,

* so it's really IMPORTANT to repeat the control also in the backend,

* before sending back from the server reserved information.

*/

});

}

}

}]);

ログイン後にコピー

このディレクティブは rootScope に登録され、routeChangeStart を監視します。これは、ルート変更が発生する前に、ユーザーの ID と権限を決定するためのアスペクトが組み込まれています。これにより、AngularJS の ID 検証のロジック全体が実現されます。

以上は編集者が紹介したAngularJSの認証方法ですので、皆様の参考になれば幸いです。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? Apr 04, 2025 pm 02:42 PM

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

javascriptの分解:それが何をするのか、なぜそれが重要なのか javascriptの分解:それが何をするのか、なぜそれが重要なのか Apr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? Apr 04, 2025 pm 05:09 PM

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

JavaScriptは学ぶのが難しいですか? JavaScriptは学ぶのが難しいですか? Apr 03, 2025 am 12:20 AM

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は?
または:
Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は? または: Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Apr 04, 2025 pm 05:36 PM

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Apr 04, 2025 pm 05:12 PM

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

フロントエンド開発でVSCodeと同様に、パネルドラッグアンドドロップ調整機能を実装する方法は? フロントエンド開発でVSCodeと同様に、パネルドラッグアンドドロップ調整機能を実装する方法は? Apr 04, 2025 pm 02:06 PM

フロントエンドのVSCodeと同様に、パネルドラッグアンドドロップ調整機能の実装を調べます。フロントエンド開発では、VSCODEと同様のVSCODEを実装する方法...

See all articles