From 8702a063e0e545f2ffc57f203b9c849599415923 Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Thu, 01 Feb 2018 15:03:59 +0800
Subject: [PATCH] 登录功能完成
---
src/app/delon.module.ts | 3 +
src/app/business/business.module.ts | 4 +
src/app/business/entity/token.ts | 4 +
src/app/app.module.ts | 3 +
src/app/business/services/http/login.service.ts | 34 +++++++++++
src/app/business/entity/data.ts | 7 ++
yarn.lock | 4
src/app/routes/routes-routing.module.ts | 2
src/app/routes/passport/login/login.component.ts | 51 ++++++++++------
src/environments/environment.ts | 2
src/app/routes/dashboard/v1/v1.component.ts | 8 ++
src/app/routes/passport/login/login.component.html | 3
src/app/app.component.ts | 4 +
13 files changed, 101 insertions(+), 28 deletions(-)
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index c1ba478..e8afd42 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -1,3 +1,4 @@
+import { LoginService } from '@business/services/http/login.service';
import { Component, HostBinding, OnInit } from '@angular/core';
import { Router, NavigationEnd } from '@angular/router';
import { ThemesService, SettingsService, TitleService } from '@delon/theme';
@@ -17,7 +18,8 @@
private theme: ThemesService,
private settings: SettingsService,
private router: Router,
- private titleSrv: TitleService) {
+ private titleSrv: TitleService,
+ private loginService:LoginService) {
}
ngOnInit() {
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 6bcec65..b3d93f0 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -21,6 +21,7 @@
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { ALAIN_I18N_TOKEN } from '@delon/theme';
import { I18NService } from '@core/i18n/i18n.service';
+import { LoginService } from '@business/services/http/login.service';
// AoT requires an exported function for factories
export function HttpLoaderFactory(http: HttpClient) {
@@ -54,6 +55,8 @@
})
],
providers: [
+ // loginservice ������������token���������������
+ LoginService,
{ provide: LOCALE_ID, useValue: 'zh-Hans' },
{ provide: HTTP_INTERCEPTORS, useClass: SimpleInterceptor, multi: true},
{ provide: HTTP_INTERCEPTORS, useClass: DefaultInterceptor, multi: true},
diff --git a/src/app/business/business.module.ts b/src/app/business/business.module.ts
index 5f8177b..a0e0997 100644
--- a/src/app/business/business.module.ts
+++ b/src/app/business/business.module.ts
@@ -1,5 +1,6 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
+import { HttpModule } from '@angular/http';
// Statics
import 'rxjs/add/observable/throw';
@@ -14,7 +15,8 @@
@NgModule({
imports: [
- CommonModule
+ CommonModule,
+ HttpModule
]
})
export class BusinessModule { }
diff --git a/src/app/business/entity/data.ts b/src/app/business/entity/data.ts
index 2aa99c6..f56e676 100644
--- a/src/app/business/entity/data.ts
+++ b/src/app/business/entity/data.ts
@@ -125,4 +125,11 @@
address:string;
describe:string;
name:string;
+}
+
+export interface UserContext {
+ authorities: any[];
+ mode: string;
+ organizationId: number;
+ username: string;
}
\ No newline at end of file
diff --git a/src/app/business/entity/token.ts b/src/app/business/entity/token.ts
new file mode 100644
index 0000000..44cf4b1
--- /dev/null
+++ b/src/app/business/entity/token.ts
@@ -0,0 +1,4 @@
+export interface Authorization{
+ token:string;
+ refreshToken:string;
+}
\ No newline at end of file
diff --git a/src/app/business/services/http/login.service.ts b/src/app/business/services/http/login.service.ts
new file mode 100644
index 0000000..d84f47a
--- /dev/null
+++ b/src/app/business/services/http/login.service.ts
@@ -0,0 +1,34 @@
+import { Authorization } from '@business/entity/token';
+import { HttpClient } from '@angular/common/http';
+import { environment } from 'environments/environment';
+import { Observable } from 'rxjs/Observable';
+import { Injectable } from '@angular/core';
+import { UserContext } from '@business/entity/data';
+import { error } from 'selenium-webdriver';
+
+@Injectable()
+export class LoginService {
+ public authorization:Authorization;
+ public userContext:UserContext;
+ private urls = {
+ login:environment.SERVER_BASH_URL+'/auth/login',
+ userContext:environment.SERVER_BASH_URL+'/user-context',
+ };
+ constructor(private http:HttpClient) { }
+ public validate(username:string,password:string):Observable<Authorization>{
+ return this.http.post(this.urls.login,{username:username,password:password,mode:"Web"}).map(
+ (res:any) => {
+ this.authorization = res;
+ return res;
+ }
+ );
+ }
+ public loadUserContext():void{
+ this.http.get(this.urls.userContext).subscribe(
+ (res:UserContext) => {
+ this.userContext = res;
+ return res;
+ }
+ );
+ }
+}
diff --git a/src/app/delon.module.ts b/src/app/delon.module.ts
index 26ab5ac..c268107 100644
--- a/src/app/delon.module.ts
+++ b/src/app/delon.module.ts
@@ -186,6 +186,9 @@
// auth
AlainAuthModule.forRoot({
// ignores: [ `\\/login`, `assets\\/` ],
+ token_send_key : 'X-Authorization',
+ token_send_template : 'Bearer ${token}',
+ token_send_place : 'header',
login_url: `/passport/login`,
allow_anonymous_key: `_allow_anonymous`
}),
diff --git a/src/app/routes/dashboard/v1/v1.component.ts b/src/app/routes/dashboard/v1/v1.component.ts
index 388ae8a..e8e6596 100644
--- a/src/app/routes/dashboard/v1/v1.component.ts
+++ b/src/app/routes/dashboard/v1/v1.component.ts
@@ -1,3 +1,4 @@
+import { LoginService } from '@business/services/http/login.service';
import { NzMessageService } from 'ng-zorro-antd';
import { Component, OnInit } from '@angular/core';
import { _HttpClient } from '@delon/theme';
@@ -8,7 +9,8 @@
})
export class DashboardV1Component implements OnInit {
- constructor(private http: _HttpClient, public msg: NzMessageService) { }
+ constructor(private http: _HttpClient, public msg: NzMessageService,
+ public loginService:LoginService) { }
todoData: any[] = [
{ completed: true, avatar: '1', name: '���������', content: `������������������������������������������` },
@@ -26,6 +28,10 @@
offlineChartData: any[] = [];
ngOnInit() {
+ // ������������������,������������������������
+ setTimeout(() => {
+ this.loginService.loadUserContext();
+ }, 1);
// this.http.get('/chart').subscribe((res: any) => {
// this.webSite = res.visitData.slice(0, 10);
// this.salesData = res.salesData;
diff --git a/src/app/routes/passport/login/login.component.html b/src/app/routes/passport/login/login.component.html
index 76283cd..1b6d4aa 100644
--- a/src/app/routes/passport/login/login.component.html
+++ b/src/app/routes/passport/login/login.component.html
@@ -10,7 +10,7 @@
<ng-container *ngIf="userName.dirty || userName.touched">
<p nz-form-explain *ngIf="userName.errors?.required">���������������������</p>
<p nz-form-explain *ngIf="userName.errors?.minlength">������������������</p>
- </ng-container>
+ </ng-container>
</div>
</div>
<div nz-form-item>
@@ -21,6 +21,7 @@
</ng-template>
</nz-input>
<div nz-form-explain *ngIf="(password.dirty || password.touched) && password.errors?.required">������������������</div>
+ <p nz-form-explain [ngStyle]="{'color': 'red'}" *ngIf="validateError">������������������������������������</p>
</div>
</div>
<div nz-form-item nz-row>
diff --git a/src/app/routes/passport/login/login.component.ts b/src/app/routes/passport/login/login.component.ts
index 678152b..41331e2 100644
--- a/src/app/routes/passport/login/login.component.ts
+++ b/src/app/routes/passport/login/login.component.ts
@@ -1,3 +1,5 @@
+import { Authorization } from '@business/entity/token';
+import { LoginService } from './../../../business/services/http/login.service';
import { SettingsService } from '@delon/theme';
import { Component, OnDestroy, Inject } from '@angular/core';
import { Router } from '@angular/router';
@@ -5,12 +7,11 @@
import { NzMessageService } from 'ng-zorro-antd';
import { SocialService, SocialOpenType, ITokenService, DA_SERVICE_TOKEN } from '@delon/auth';
import { environment } from '@env/environment';
-
@Component({
selector: 'passport-login',
templateUrl: './login.component.html',
styleUrls: [ './login.component.less' ],
- providers: [ SocialService ]
+ providers: [ SocialService]
})
export class UserLoginComponent implements OnDestroy {
@@ -25,6 +26,7 @@
public msg: NzMessageService,
private settingsService: SettingsService,
private socialService: SocialService,
+ private loginService:LoginService,
@Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService) {
this.form = fb.group({
userName: [null, [Validators.required, Validators.minLength(5)]],
@@ -75,28 +77,37 @@
this.captcha.markAsDirty();
if (this.mobile.invalid || this.captcha.invalid) return;
}
- // mock http
this.loading = true;
- setTimeout(() => {
- this.loading = false;
- if (this.type === 0) {
- if (this.userName.value !== 'admin' || this.password.value !== '123456') {
- this.error = `���������������������`;
- return;
+ this.loginService.validate(this.userName.value,this.password.value).subscribe(
+ (res:Authorization) => {
+ if(res.token!=null){
+ this.tokenService.set({
+ token: res.token,
+ name: this.userName.value,
+ time: +new Date
+ });
+ this.validateError = true;
+ this.router.navigate(['/']);
+ }
+ },
+ (err) => {
+ console.log(err);
+ if(err instanceof ProgressEvent){
+ const error = <ProgressEvent>err;
+ let xmlHttp = error.target;
+ if(xmlHttp instanceof XMLHttpRequest){
+ const xmlHttpRequest = <XMLHttpRequest> xmlHttp;
+ if(xmlHttpRequest.status == 401){
+ this.validateError = true;
+ this.loading = false;
+ }
+ }
+ }
}
- }
+ );
- this.tokenService.set({
- token: '123456789',
- name: this.userName.value,
- email: `cipchk@qq.com`,
- id: 10000,
- time: +new Date
- });
- this.router.navigate(['/']);
- }, 1000);
}
-
+ public validateError:boolean;
// region: social
open(type: string, openType: SocialOpenType = 'href') {
diff --git a/src/app/routes/routes-routing.module.ts b/src/app/routes/routes-routing.module.ts
index 918d7de..9138cfb 100644
--- a/src/app/routes/routes-routing.module.ts
+++ b/src/app/routes/routes-routing.module.ts
@@ -38,7 +38,7 @@
{ path: 'login', component: UserLoginComponent }
]
},
- { path: '**', redirectTo: 'dashboard' }
+ { path: '**', redirectTo: 'passport/login' }
];
@NgModule({
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index 6163163..2a6fb94 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -9,5 +9,5 @@
production: false,
hmr: false,
useHash: true,
- SERVER_BASH_URL: `http://47.96.171.62:8080/screen_api_v2/`
+ SERVER_BASH_URL: `http://127.0.0.1:8001/`
};
diff --git a/yarn.lock b/yarn.lock
index 5fa8eed..1484f9d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7866,9 +7866,9 @@
semver "^5.3.0"
xml2js "^0.4.17"
-webpack-bundle-analyzer@^2.9.0:
+webpack-bundle-analyzer@^2.9.2:
version "2.9.2"
- resolved "http://registry.npm.taobao.org/webpack-bundle-analyzer/download/webpack-bundle-analyzer-2.9.2.tgz#63ed86eb71cc4cda86f68e685a84530ba0126449"
+ resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.9.2.tgz#63ed86eb71cc4cda86f68e685a84530ba0126449"
dependencies:
acorn "^5.1.1"
chalk "^1.1.3"
--
Gitblit v1.8.0