The authentication and authorization are the most important part of every application but different type to process to used to Authentication and authorization.
Today's I am going to share the code sample of HTTP Authentication (single page application) using AngularJs.
The two types of Authentication
The Table of Context
Configure the Application setting
Today's I am going to share the code sample of HTTP Authentication (single page application) using AngularJs.
The two types of Authentication
- The cookies based authentication and Its done by server side cookies for each user request.
- The token based authentication and it's done by send the token for each request.
The Table of Context
- Configure the Routes for Application.
- Write the controller code.
- Login controller.
- Landing controller.
- Write the Factory code.
- Login factory.
- Authentication Http Response Interceptor.
- HTML Code for Login Page.
- HTML code for Index page.
- Bundling of Js files.
Configure the Application setting
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| var app = angular.module( 'ngApp' , [ 'ngRoute' ]); app.controller( 'LandingPageController' , LandingPageController); app.controller( 'LoginController' , LoginController);
app.factory( 'AuthHttpResponseInterceptor' , AuthHttpResponseInterceptor); app.factory( 'LoginFactory' , LoginFactory); var configFunction = function ($routeProvider, $httpProvider) { $routeProvider. when( '/login' , { templateUrl: '/Account/Login' , controller: LoginController }) .when( '/register' , { templateUrl: '/Account/Register' , controller: RegisterController }) .when( '/forgotPassword' , { templateUrl: '/Account/forgotpassword' , controller: 'forgotController' }) .when( '/home' , { templateUrl: '/Home/Index' , controller: 'homeController' }) .otherwise({ redirectTo: '/login' });; $httpProvider.interceptors.push( 'AuthHttpResponseInterceptor' ); } configFunction.$inject = [ '$routeProvider' , '$httpProvider' ]; app.config(configFunction); |
var app = angular.module('ngApp', ['ngRoute']); app.controller('LandingPageController', LandingPageController); app.controller('LoginController', LoginController); app.factory('AuthHttpResponseInterceptor', AuthHttpResponseInterceptor); app.factory('LoginFactory', LoginFactory); var configFunction = function ($routeProvider, $httpProvider) { $routeProvider. when('/login', { templateUrl: '/Account/Login', controller: LoginController }) .when('/register', { templateUrl: '/Account/Register', controller: RegisterController }) .when('/forgotPassword', { templateUrl: '/Account/forgotpassword', controller: 'forgotController' }) .when('/home', { templateUrl: '/Home/Index', controller: 'homeController' }) .otherwise({ redirectTo: '/login' });; $httpProvider.interceptors.push('AuthHttpResponseInterceptor'); } configFunction.$inject = ['$routeProvider', '$httpProvider']; app.config(configFunction);Login Controller
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| var LoginController = function ($scope, $routeParams, $location, LoginFactory) { $scope.loginForm = { email: '' , password: '' , rememberMe: false , returnUrl: $routeParams.returnUrl, loginFailure: false , loginSucess: false }; $scope.login = function () { var result = LoginFactory($scope.loginForm.email, $scope.loginForm.password, $scope.loginForm.rememberMe); result.then( function (result) { if (result.success) { if ($scope.loginForm.returnUrl !== undefined) { $location.path( '/' ); } else { $location.path($scope.loginForm.returnUrl); } $scope.loginForm.loginSucess = true ; } else { $scope.loginForm.loginFailure = true ; } }); } } //This is used to Inject the login controller. LoginController.$inject = [ '$scope' , '$routeParams' , '$location' , 'LoginFactory' ]; |
var LoginController = function ($scope, $routeParams, $location, LoginFactory) { $scope.loginForm = { email: '', password: '', rememberMe: false, returnUrl: $routeParams.returnUrl, loginFailure: false, loginSucess: false }; $scope.login = function () { var result = LoginFactory($scope.loginForm.email, $scope.loginForm.password, $scope.loginForm.rememberMe); result.then(function (result) { if (result.success) { if ($scope.loginForm.returnUrl !== undefined) { $location.path('/'); } else { $location.path($scope.loginForm.returnUrl); } $scope.loginForm.loginSucess = true; } else { $scope.loginForm.loginFailure = true; } }); } } //This is used to Inject the login controller. LoginController.$inject = ['$scope', '$routeParams', '$location', 'LoginFactory'];landing.page.controller
1
2
3
4
5
6
7
8
| var LandingPageController = function ($scope) { $scope.models = { helloAngular: 'Landing page!!!' }; } // The inject property of every controller needs to be a string array equal to the controllers arguments, only as strings LandingPageController.$inject = [ '$scope' ]; |
var LandingPageController = function ($scope) { $scope.models = { helloAngular: 'Landing page!!!' }; } // The inject property of every controller needs to be a string array equal to the controllers arguments, only as strings LandingPageController.$inject = ['$scope'];login factory
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| var LoginFactory = function ($http, $q) { return function (email, password, rememberMe) { var deferredObject = $q.defer(); $http.post( '/Account/Login' , { Email: email, Password: password, RememberMe: rememberMe } ). success( function (data) { if (data == "True" ) { deferredObject.resolve({ success: true }); } else { deferredObject.resolve({ success: false }); } }). error( function () { deferredObject.resolve({ success: false }); }); return deferredObject.promise; } } LoginFactory.$inject = [ '$http' , '$q' ]; |
var LoginFactory = function ($http, $q) { return function (email, password, rememberMe) { var deferredObject = $q.defer(); $http.post( '/Account/Login', { Email: email, Password: password, RememberMe: rememberMe } ). success(function (data) { if (data == "True") { deferredObject.resolve({ success: true }); } else { deferredObject.resolve({ success: false }); } }). error(function () { deferredObject.resolve({ success: false }); }); return deferredObject.promise; } } LoginFactory.$inject = ['$http', '$q'];Authentication Http Response Interceptor
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
| var AuthHttpResponseInterceptor = function ($q, $location) { return { response: function (response) { if (response.status === 401) { console.log( "Response 401" ); } return response || $q.when(response); }, responseError: function (rejection) { if (rejection.status === 401) { $location.path( '/login' ).search( 'returnUrl' , $location.path()); } return $q.reject(rejection); } } } AuthHttpResponseInterceptor.$inject = [ '$q' , '$location' ]; |
var AuthHttpResponseInterceptor = function ($q, $location) { return { response: function (response) { if (response.status === 401) { console.log("Response 401"); } return response || $q.when(response); }, responseError: function (rejection) { if (rejection.status === 401) { $location.path('/login').search('returnUrl', $location.path()); } return $q.reject(rejection); } } } AuthHttpResponseInterceptor.$inject = ['$q', '$location'];HTML Login code
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| < div class = "col-xs-12 col-sm-12 col-md-5 col-lg-4" > < div class = "well no-padding" > < form ng-submit = "login()" class = "smart-form client-form" > < header > Sign In </ header > < fieldset > < section > < label class = "label" >E-mail</ label > < label class = "input" > < i class = "icon-append fa fa-user" ></ i > < input type = "email" ng-model = "loginForm.email" id = "email" /> < b class = "tooltip tooltip-top-right" >< i class = "fa fa-user txt-color-teal" ></ i > Please enter email address/username</ b > </ label > </ section > < section > < label class = "label" >Password</ label > < label class = "input" > < i class = "icon-append fa fa-lock" ></ i > < input type = "password" id = "password" ng-model = "loginForm.password" /> < b class = "tooltip tooltip-top-right" >< i class = "fa fa-lock txt-color-teal" ></ i > Enter your password</ b > </ label > < div class = "note" > < a href = "@Url.Action(" forgotpassword", "account")">< i class = "fa fa-frown-o" ></ i > Forgot password?</ a > </ div > </ section > < section > < label class = "checkbox" > < input type = "checkbox" id = "rememberMe" ng-model = "loginForm.rememberMe" /> < input type = "hidden" name = "rememberMe" value = "false" /> < i ></ i >Stay signed in </ label > </ section > </ fieldset > < footer > < button type = "submit" class = "btn btn-primary" > Sign in </ button > </ footer > </ form > </ div > < div ng-if = "loginForm.loginFailure" > Faild login!!!! </ div > < div ng-if = "loginForm.loginSucess" > Success!!! Welcome You!!! </ div > </ div > |
<div class="col-xs-12 col-sm-12 col-md-5 col-lg-4"> <div class="well no-padding"> <form ng-submit="login()" class="smart-form client-form"> <header> Sign In </header> <fieldset> <section> <label class="label">E-mail</label> <label class="input"> <i class="icon-append fa fa-user"></i> <input type="email" ng-model="loginForm.email" id="email" /> <b class="tooltip tooltip-top-right"><i class="fa fa-user txt-color-teal"></i> Please enter email address/username</b> </label> </section> <section> <label class="label">Password</label> <label class="input"> <i class="icon-append fa fa-lock"></i> <input type="password" id="password" ng-model="loginForm.password" /> <b class="tooltip tooltip-top-right"><i class="fa fa-lock txt-color-teal"></i> Enter your password</b> </label> <div class="note"> <a href="@Url.Action("forgotpassword", "account")"><i class="fa fa-frown-o"></i> Forgot password?</a> </div> </section> <section> <label class="checkbox"> <input type="checkbox" id="rememberMe" ng-model="loginForm.rememberMe" /> <input type="hidden" name="rememberMe" value="false" /> <i></i>Stay signed in </label> </section> </fieldset> <footer> <button type="submit" class="btn btn-primary"> Sign in </button> </footer> </form> </div> <div ng-if="loginForm.loginFailure"> Faild login!!!! </div> <div ng-if="loginForm.loginSucess"> Success!!! Welcome You!!! </div> </div>HTML code for Index page.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
| <!DOCTYPE html> < html ng-app = "ngApp" > < head > < title ></ title > < script src = "//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular.min.js" ></ script > < script src = "//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular-route.min.js" ></ script > @Scripts.Render("~/bundles/loginAutheication") </ head > < body ng-controller = "LandingPageController" > < div > < div >< a href = "/#/login" >Login</ a ></ div > < div >< a href = "/#/register" >Register</ a ></ div > </ div > < div ng-view></ div > </ body > </ html > |
<!DOCTYPE html> <html ng-app="ngApp"> <head> <title></title> <script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular-route.min.js"></script> @Scripts.Render("~/bundles/loginAutheication") </head> <body ng-controller="LandingPageController"> <div> <div><a href="/#/login">Login</a></div> <div><a href="/#/register">Register</a></div> </div> <div ng-view></div> </body> </html>Bundling of Js files.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
| public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { bundles.Add( new ScriptBundle( "~/bundles/loginAutheication" ) .IncludeDirectory( "~/Scripts/app/Controllers" , "*.js" ) .IncludeDirectory( "~/Scripts/app/Factory" , "*.js" ) .Include( "~/Scripts/app/app.js" )); bundles.Add( new StyleBundle( "~/Content/css" ).Include( "~/Content/site.css" )); BundleTable.EnableOptimizations = true ; } } |
public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new ScriptBundle("~/bundles/loginAutheication") .IncludeDirectory("~/Scripts/app/Controllers", "*.js") .IncludeDirectory("~/Scripts/app/Factory", "*.js") .Include("~/Scripts/app/app.js")); bundles.Add(new StyleBundle("~/Content/css").Include( "~/Content/site.css")); BundleTable.EnableOptimizations = true; } }