breeze js به همراه ایجاد سایت آگهی قسمت سوم
نویسنده: حسین حقیقیان
تاریخ: ۱۳۹۵/۰۳/۲۲ ۱۵:۲۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
[BreezeController]
public class AccountController : ApiController
{
...
} module Interfaces {
export interface IAuthService {
user: Models.IUserToken
getUserInfo(accessToken);
login(data);
logOut();
register(data);
changePassword(data);
accessToken(accessToken, data);
}
} "grant_type=password & username=myusername & password=mypassword";
var ajaxAdapter = breeze.config.getAdapterInstance("ajax");
breeze.ajaxpost(ajaxAdapter); .withParameters({
$method: 'POST',
$encoding: 'JSON',
$data: newData
} module AdApps {
var securityUrls = {
site: '/',
login: '/token',
logout: 'logout',
register: 'register',
userInfo: 'getUserInfo',
changePassword: 'changePassword',
}
export class AuthService implements Interfaces.IAuthService {
private manager: breeze.EntityManager;
constructor(
private _breeze: typeof breeze,
private $http: ng.IHttpProvider,
private toaster: ngtoaster.IToasterService,
private $location: ng.ILocationService) {
var dataService = new _breeze.DataService({
serviceName: "/breeze/Account",
hasServerMetadata: false
});
var metadataStore = new _breeze.MetadataStore({
namingConvention: _breeze.NamingConvention.camelCase
});
this.manager = new _breeze.EntityManager({
dataService: dataService,
metadataStore: metadataStore,
saveOptions: new _breeze.SaveOptions({
allowConcurrentSaves: true, tag: [{}]
})
});
}
user: Models.IUserToken;
accessToken(accessToken, data): string {
if (accessToken === 'clear') {
localStorage.removeItem('accessToken');
delete this.$http.defaults.headers.common.Authorization;
}
else {
window.localStorage.setItem("accessToken", accessToken);
this.$http.defaults.headers.common.Authorization = 'Bearer ' + accessToken;
}
return accessToken;
}
getUserInfo(): ng.IPromise<any> {
var query = this._breeze.EntityQuery.from(securityUrls.userInfo);
return this.manager.executeQuery(query).then(data => {
return data.results[0];
});
}
login(data: any): ng.IPromise<any> {
var newData = "grant_type=password&username=" + data.userName + "&password=" + data.password;
var query = this._breeze.EntityQuery.from(securityUrls.login)
.withParameters({
$method: 'POST',
$encoding: 'JSON',
$data: newData
});
return this.manager.executeQuery(query).then(data => {
var self = this;
var result = data.results[0] as any;
self.accessToken(result.access_token, data.results[0]);
self.user = <Models.IUserToken>{};
self.user = <Models.IUserToken>result;
return result;
});
}
logOut(): ng.IPromise<any> {
var query = this._breeze.EntityQuery.from(securityUrls.logout)
.withParameters({
$method: 'POST',
$encoding: 'JSON',
});
return this.manager.executeQuery(query).then(data => {
this.user = null;
this.accessToken('clear', null);
this.$location.path("/");
});
}
register(data: Object): ng.IPromise<any> {
var query = this._breeze.EntityQuery.from(securityUrls.register)
.withParameters({
$method: 'POST',
$encoding: 'JSON',
$data: data
});
return this.manager.executeQuery(query).then(data => { });
}
changePassword(data: Object): ng.IPromise<any> {
var query = this._breeze.EntityQuery.from(securityUrls.changePassword)
.withParameters({
$method: 'POST',
$encoding: 'JSON',
$data: data
});
return this.manager.executeQuery(query).then(data => { });
}
}
} module AdApps {
export class HttpInterceptor {
private static _toaster: ngtoaster.IToasterService;
private static _$q: ng.IQService;
constructor(
private $q: ng.IQService,
private toaster: ngtoaster.IToasterService,
private $location: ng.ILocationService) {
HttpInterceptor._toaster = toaster;
HttpInterceptor._$q = $q;
}
request(config): string {
config.headers = config.headers || {};
var authData = window.localStorage.getItem("accessToken");
if (authData) {
config.headers.Authorization = "Bearer " + authData;
}
return config;
};
response(response): ng.IPromise<any> {
if (response.data && response.data.message && response.status === 200) {
HttpInterceptor._toaster.success(response.data.message)
}
return HttpInterceptor._$q.resolve(response);
};
responseError(response): ng.IPromise<any> {
var self = this;
var data = response.data;
var title = "خطا";
var messages = [];
if (data) {
if (data.error) {
title = data.error;
}
if (data.message) {
messages.push(data.message);
}
if (data.Message) {
messages.push(data.Message);
}
if (data.ModelState) {
angular.forEach(data.ModelState, function (errors, key) {
if (key.substr(0, 1) != "$")
{ messages.push(errors); }
});
}
if (data.exceptionMessage) {
messages.push(data.exceptionMessage);
}
if (data.ExceptionMessage) {
messages.push(data.ExceptionMessage);
}
if (data.error_description) {
messages.push(data.error_description);
}
if (messages.length > 0) {
HttpInterceptor._toaster.error(title, messages.join("<br/>"));
}
if (response.status === "401") {
self.$location.path("/ورود");
}
}
return HttpInterceptor._$q.reject(response);
}
}
} module AdApps {
class SecurityCtrl {
constructor(private $scope: Interfaces.IAuthScope, private authService: AuthService) {
$scope.authService = authService;
if (window.localStorage.getItem("accessToken") != null) {
authService.getUserInfo().then(function (data) {
$scope.authService.user = data;
});
}
$scope.logOut = function () {
return authService.logOut().then(function () { });
}
}
}
define(["angularAmd", "angular", "factory/AuthService", "factory/httpInterceptor"], (angularAmd, ng) => {
angularAmd = angularAmd.__proto__;
var app = ng.module("AngularTypeScript", ['ngRoute', 'breeze.angular', 'toaster']);
var viewPath = "app/views/";
var controllerPath = "app/controller/";
app.config(['$routeProvider', '$httpProvider', function ($routeProvider, $httpProvider) {
$httpProvider.interceptors.push("HttpInterceptor");
$routeProvider
.when("/", angularAmd.route({
templateUrl: viewPath + "home.html",
controllerUrl: controllerPath + "home.js"
}))
.when("/login", angularAmd.route({
templateUrl: viewPath + "login.html",
controllerUrl: controllerPath + "login.js"
}))
.when("/register", angularAmd.route({
templateUrl: viewPath + "register.html",
controllerUrl: controllerPath + "register.js"
}))
.when("/changePassword", angularAmd.route({
templateUrl: viewPath + "change-password.html",
controllerUrl: controllerPath + "changePassword.js"
}))
.otherwise({ redirectTo: '/' });
}
]);
app.service('AuthService', ['breeze', '$http', 'toaster', '$location', AuthService]);
app.service("HttpInterceptor", ["$q", "toaster", "$location", HttpInterceptor]);
app.controller('SecurityCtrl', ['$scope', 'AuthService', SecurityCtrl]);
return angularAmd.bootstrap(app);
});
} module AdApps {
define(['app'], function (app) {
app.controller('LoginCtrl', ["$scope", "AuthService", "$location", LoginCtrl]);
});
export class LoginCtrl {
constructor($scope: Interfaces.ILoginScope, authService: AuthService, $location: ng.ILocationService) {
$scope.submit = function () {
authService.login(angular.copy($scope.form))
.then(function (data) {
this.$location.path("/");
})
};
}
}
} <div ng-controller="LoginCtrl">
<div>
<i></i>
<span>ورود</span>
<div>
<div>
</div>
</div>
</div>
<div>
<div>
<div>
<form name="Form" id="form1">
<fieldset>
<div>
<div>
<input
name="username"
ng-model="form.userName"
placeholder="نام کاربری"
required>
<span>
<i></i>
</span>
</div>
</div>
<div>
<div>
<input name="password"
type="password"
ng-model="form.password"
placeholder="{{'Password'}}"
validator="required">
<span>
<i></i>
</span>
</div>
</div>
</fieldset>
<div>
<button type="submit" ng-click="submit()">ورود</button>
</div>
</form>
</div>
</div>
</div>
</div> requirejs.config({
paths: {
"app": "app",
"angularAmd": "/Scripts/angularAmd",
"angular": "/Scripts/angular",
"breezeAjaxpost": "/Scripts/breeze/breeze.ajaxpost",
"breeze": "/Scripts/breeze/breeze.debug",
"breezeAngular": "/Scripts/breeze/breeze.angular",
"bootstrap": "/Scripts/bootstrap",
"angularRoute": "/Scripts/angular-route",
"jquery": "/Scripts/jquery-2.2.2",
"entityManagerService": "factory/entityManagerService",
"toaster": "/Scripts/toaster",
},
waitSeconds: 0,
shim: {
"angular": { exports: "angular" },
"angularRoute": { deps: ["angular"] },
"bootstrap": { deps: ["jquery"] },
"breeze": { deps: ["jquery"] },
"breezeAngular": {
deps: ["angular", "breeze"]
},
"toaster": { deps: ["angular"] },
"app": {
deps: ["bootstrap", "angularRoute", "toaster", "breezeAngular", "breezeAjaxpost"]
}
}
});
require(["app"]);