私はAngularJSを使い始めたばかりで、AngularAppにユーザーセッションを保存しようとしています。
ユーザー名とパスワードを送信する最初のステップは機能します。その後、サービスから取得したusername
を_$rootScope
_に保存します。次のページには、保存されているusername
を表示できます。
ただし、更新後、_$rootScope
_は空になります。
認証システムをできる限りシンプルにしようとしています。
_myApp.controller('loginController', ['$scope', '$rootScope', '$location', 'AuthService', '$route',
function ($scope, $rootScope, $location, AuthService, $route) {
$scope.login = function (credentials) {
AuthService.login(credentials).then(function (response) {
if(response.data == "0"){
alert("Identifiant ou mot de passe incorrect");
}
else {
// response.data is the JSON below
$rootScope.credentials = response.data;
$location.path("/");
}
});
};
}]);
_
AuthService.login()
は_$http
_要求を作成します。
JSON
_ {user_id: 1, user_name: "u1", user_display_name: "Steffi"}
_
HTML
_ <div>Welcome {{ credentials.user_display_name }}!</div>
_
私は多くのチュートリアルを試しましたが、セッションを機能させることはできません。私はすでにUserAppを使用しましたが、それは大丈夫ではありません。独自のsimple認証を作成したいと思います。
$rootScope
は単一ページのアプリなので、ページが更新されると常にリセットされます。
CookieやsessionStorageなど、クライアント側に永続的なものを使用する必要があります(両方とも有効期限があるため)。 $cookieStore
のドキュメントをご覧ください: https://docs.angularjs.org/api/ngCookies/service/$cookieStore
セッションの機密情報は暗号化する必要があります。
使用できます
Web StorageをAngular Way。で動作させるAngularJSモジュール。2つのサービス$ localStorageと$ sessionStorageが含まれます。
他の実装との違い
No Getter 'n' Setter Bullshit-AngularJSホームページから:「他のフレームワークとは異なり、モデルをラップする必要はありません[...]アクセッサメソッド。単純な古いJavaScriptがここにあります。」これで、Web Storageでデータの永続性を達成しながら、同じメリットを享受できます。
sessionStorage-よく見落とされがちなこのバディをカバーしました。
きれいに作成されたコード-Angular方法で、テスト容易性を念頭に置いて適切に構成されています。
Cookieのフォールバックなし-AngularJSが公式にサポートするすべてのブラウザーでWeb Storageが容易に利用できるため、このようなフォールバックはほとんど冗長です。
サンプル例を次に示します
var eS = angular.module('exampleStore', ['localStorage']);
現在のユーザーを収集するには、サーバー上にAPIを作成する必要があります。このAPIは、ログイン後のユーザーオブジェクトと同じユーザーオブジェクトを返す必要があります。
$ routeProvider内で保護する$ route.pathごとに、ng-initを使用してコントローラーでこのAPIを呼び出します。 APIがオブジェクトを返す場合、オブジェクトを$ rootScopeに追加します。それ以外の場合は、ユーザーをログインページに強制します。