1、AuthService.ts
import { Injectable } from '@angular/core';
@Injectable()
export class AuthService {
// store the URL so we can redirect after logging in
redirectUrl: string;
login(user: string, password: string): boolean {
if (user === 'user' && password === 'password') {
localStorage.setItem('username', user);
return true;
}
return false;
}
logout(): any {
localStorage.removeItem('username');
}
getUser(): any {
return localStorage.getItem('username');
}
isLoggedIn(): boolean {
return this.getUser() !== null;
}
}
export var AUTH_PROVIDERS: Array
{ provide: AuthService, useClass: AuthService }
];
2、SigninComponent
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { FormBuilder, FormGroup, Validators, FormControl } from '@angular/forms';
import {AuthService} from './../../AuthService';
@Component({
selector: 'app-signin',
templateUrl: './signin.component.html',
styleUrls: ['./signin.component.scss']
})
export class SigninComponent implements OnInit {
public form: FormGroup;
message: string;
constructor(private fb: FormBuilder, private router: Router, private authService: AuthService) {
this.message = '';
}
ngOnInit() {
this.form = this.fb.group ( {
uname: [null , Validators.compose ( [ Validators.required ] )] , password: [null , Validators.compose ( [ Validators.required ] )]
} );
}
onSubmit() {
this.message = '';
// if (!this.authService.login('user', 'password')) {
if (!this.authService.login(this.form.get("uname").value, this.form.get("password").value)) {
alert("用户名或密码错误!");
this.message = 'Incorrect credentials.';
setTimeout(function() {
this.message = '';
}.bind(this), 2500);
} else {
// this.router.navigate ( [ 'dashboard' ] );
this.router.navigate(['/dashboard']);
}
return false;
}
logout(): boolean {
this.authService.logout();
return false;
}
}
3、signin.component.html
import { Injectable } from '@angular/core';
import {
CanActivate, Router,
ActivatedRouteSnapshot,
RouterStateSnapshot
} from '@angular/router';
import { AuthService } from './AuthService';
@Injectable()
export class LoggedInGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
let url: string = state.url;
// alert("url="+url);
return this.checkLogin(url);
}
checkLogin(url: string): boolean {
if (this.authService.isLoggedIn()) { return true; }
// Store the attempted URL for redirecting
this.authService.redirectUrl = url;
// Navigate to the login page with extras
// this.router.navigate(['/login']);
alert("请先登录系统!");
this.router.navigate(['/']);
return false;
}
}
5、SessionRoutes
import { Routes } from '@angular/router';
import { NotFoundComponent } from './not-found/not-found.component';
import { ErrorComponent } from './error/error.component';
import { ForgotComponent } from './forgot/forgot.component';
import { LockscreenComponent } from './lockscreen/lockscreen.component';
import { SigninComponent } from './signin/signin.component';
import { SignupComponent } from './signup/signup.component';
import {LoggedInGuard} from './../loggedIn.guard';
export const SessionRoutes: Routes = [
{
path: '',
children: [{
path: '',
redirectTo: 'signin',
pathMatch: 'full'
}, {
path: '404',
component: NotFoundComponent
}, {
path: 'error',
component: ErrorComponent
}, {
path: 'forgot',
component: ForgotComponent
}, {
path: 'lockscreen',
canActivate: [LoggedInGuard],
component: LockscreenComponent
}, {
path: 'signin',
component: SigninComponent
}, {
path: 'signup',
component: SignupComponent
}]
}
];
6、SessionModule
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { CommonModule } from '@angular/common';
import { MatIconModule, MatCardModule, MatInputModule, MatCheckboxModule, MatButtonModule } from '@angular/material';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { FlexLayoutModule } from '@angular/flex-layout';
import { SessionRoutes } from './session.routing';
import { NotFoundComponent } from './not-found/not-found.component';
import { ErrorComponent } from './error/error.component';
import { ForgotComponent } from './forgot/forgot.component';
import { LockscreenComponent } from './lockscreen/lockscreen.component';
import { SigninComponent } from './signin/signin.component';
import { SignupComponent } from './signup/signup.component';
import {LocationStrategy, HashLocationStrategy} from '@angular/common';
import {AUTH_PROVIDERS} from './../AuthService';
import {LoggedInGuard} from './../loggedIn.guard';
@NgModule({
imports: [
CommonModule,
RouterModule.forChild(SessionRoutes),
MatIconModule,
MatCardModule,
MatInputModule,
MatCheckboxModule,
MatButtonModule,
FlexLayoutModule,
FormsModule,
ReactiveFormsModule
],
declarations: [
NotFoundComponent,
ErrorComponent,
ForgotComponent,
LockscreenComponent,
SigninComponent,
SignupComponent
],
providers: [
AUTH_PROVIDERS,
LoggedInGuard,
{ provide: LocationStrategy, useClass: HashLocationStrategy }
]
})
export class SessionModule {}
7、AppModule
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { RouterModule } from '@angular/router';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpClientModule, HttpClient } from '@angular/common/http';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { LoadingBarRouterModule } from '@ngx-loading-bar/router';
import { PerfectScrollbarModule } from 'ngx-perfect-scrollbar';
import { PERFECT_SCROLLBAR_CONFIG } from 'ngx-perfect-scrollbar';
import { PerfectScrollbarConfigInterface } from 'ngx-perfect-scrollbar';
import { AgmCoreModule } from '@agm/core';
import {
MatSidenavModule,
MatCardModule,
MatMenuModule,
MatCheckboxModule,
MatIconModule,
MatButtonModule,
MatToolbarModule,
MatTabsModule,
MatListModule,
MatSlideToggleModule,
MatSelectModule,
MatProgressBarModule } from '@angular/material';
import { FlexLayoutModule } from '@angular/flex-layout';
import {BidiModule} from '@angular/cdk/bidi';
import {
MenuComponent,
HeaderComponent,
SidebarComponent,
NotificationComponent,
OptionsComponent,
AdminLayoutComponent,
AuthLayoutComponent,
AccordionAnchorDirective,
AccordionLinkDirective,
AccordionDirective} from './core';
import { AppRoutes } from './app.routing';
import { AppComponent } from './app.component';
import { SessionModule } from './session/session.module';
export function createTranslateLoader(http: HttpClient) {
return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}
const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {
suppressScrollX: true,
wheelSpeed: 2,
wheelPropagation: true,
minScrollbarLength: 20
};
@NgModule({
declarations: [
AppComponent,
HeaderComponent,
SidebarComponent,
NotificationComponent,
OptionsComponent,
MenuComponent,
AdminLayoutComponent,
AuthLayoutComponent,
AccordionAnchorDirective,
AccordionLinkDirective,
AccordionDirective,
],
imports: [
BrowserModule,
BrowserAnimationsModule,
RouterModule.forRoot(AppRoutes),
FormsModule,
HttpClientModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: (createTranslateLoader),
deps: [HttpClient]
}
}),
LoadingBarRouterModule,
MatSidenavModule,
MatCardModule,
MatMenuModule,
MatCheckboxModule,
MatIconModule,
MatButtonModule,
MatToolbarModule,
MatTabsModule,
MatListModule,
MatSlideToggleModule,
MatSelectModule,
MatProgressBarModule,
FlexLayoutModule,
BidiModule,
AgmCoreModule.forRoot({apiKey: 'YOURAPIKEY'}),
PerfectScrollbarModule,
SessionModule
],
providers: [
{
provide: PERFECT_SCROLLBAR_CONFIG,
useValue: DEFAULT_PERFECT_SCROLLBAR_CONFIG
}
],
bootstrap: [AppComponent]
})
export class AppModule { }