}
},
"@nebular/auth": {
- "version": "2.0.0-rc.4",
- "resolved": "https://registry.npmjs.org/@nebular/auth/-/auth-2.0.0-rc.4.tgz",
- "integrity": "sha512-+2/qedeNkLHt1tKjQ57LUDZYOJoyjDRlIipQ+S7Hj8k8aCpLW6S8tuUvtlcobVn2M7+Cn1vj3CYGaNYCgrz2SA=="
+ "version": "2.0.0-rc.6",
+ "resolved": "https://registry.npmjs.org/@nebular/auth/-/auth-2.0.0-rc.6.tgz",
+ "integrity": "sha512-DRdU1xcTO1lDTBFZuy2XJKQjpatCp+nimaBtxCfX8Pel+FpKMF6IITuRpPF5sfPYTYPo2F1Tr3LY0b3LEOuBNA=="
},
"@nebular/theme": {
- "version": "2.0.0-rc.4",
- "resolved": "https://registry.npmjs.org/@nebular/theme/-/theme-2.0.0-rc.4.tgz",
- "integrity": "sha512-3IwPdk8Y/XJENx+zYmzHgcVJSqGmLLYXqoHV7jSZs2BMgRhsWmmDNYti1h6Gybw/RlieygwBuEh2aX6Qvh50bA=="
+ "version": "2.0.0-rc.6",
+ "resolved": "https://registry.npmjs.org/@nebular/theme/-/theme-2.0.0-rc.6.tgz",
+ "integrity": "sha512-lhnm9bZTNL/L1APyRwC7KVBLY5oPEUsVLFiMdawrBELWNLgLrTwr9+o2GexiBSBbcz3zkTraWhWNRUfdUqMi2Q=="
},
"@ng-bootstrap/ng-bootstrap": {
"version": "1.0.0-beta.8",
"@angular/platform-browser": "~5.2.6",
"@angular/platform-browser-dynamic": "~5.2.6",
"@angular/router": "~5.2.6",
- "@nebular/auth": "2.0.0-rc.4",
- "@nebular/theme": "2.0.0-rc.4",
+ "@nebular/auth": "2.0.0-rc.6",
+ "@nebular/theme": "2.0.0-rc.6",
"@ng-bootstrap/ng-bootstrap": "1.0.0-beta.8",
"bootstrap": "4.0.0-beta.2",
"classlist.js": "1.1.20150312",
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
-import { NbAuthService, NbAuthSimpleToken, NbAuthJWTToken, NbTokenService } from '@nebular/auth';
+import { NbAuthService, NbAuthToken, NbAuthJWTToken, NbTokenService } from '@nebular/auth';
import { SERVER_URL } from '../../../../config';
import { Observable } from 'rxjs/Observable';
import { tap } from 'rxjs/operators';
@Injectable()
export class AuthService {
private logoutUrl = SERVER_URL + '/auth/logout';
- private token: NbAuthJWTToken;
+ private token: NbAuthToken;
constructor(
private nbAuthService: NbAuthService,
private http: HttpClient,
private nbTokenService: NbTokenService) {
this.onTokenChange()
- .subscribe((token: NbAuthJWTToken) => {
+ .subscribe((token: NbAuthToken) => {
if (token) {
this.token = token;
}
}
logout(): Observable<any> {
- this.nbTokenService.clear().pipe();
-
return this.http.delete<any>(this.logoutUrl).pipe(
tap(
- ok => console.info(`logged out`),
- error => console.error(`logout error`),
+ ok => this.nbTokenService.clear().pipe(),
+ error => this.nbTokenService.clear().pipe(),
),
);
}
- onTokenChange(): Observable<NbAuthSimpleToken> {
+ onTokenChange(): Observable<NbAuthToken> {
return this.nbAuthService.onTokenChange();
}
getToken(): NbAuthJWTToken {
- return this.token;
+ return this.token as NbAuthJWTToken;
}
}
[class.right]="position === 'normal'"
[class.left]="position === 'inverse'">
<nb-action>
- <nb-user [menu]="userMenu" [name]="user?.fullName" [picture]="user?.picture" (menuClick)="menuItemClick($event)"></nb-user>
+ <nb-user [nbContextMenu]="userMenu" [name]="user?.fullName" [picture]="user?.picture"></nb-user>
</nb-action>
<nb-action class="control-item" icon="nb-notifications"></nb-action>
<nb-action class="control-item">
}
@include media-breakpoint-down(sm) {
-
nb-user /deep/ .user-name {
display: none;
}
display: none;
}
}
+
+ nb-user:hover {
+ cursor: pointer;
+ }
}
import { Component, Input, OnInit } from '@angular/core';
import { NbMenuService, NbSidebarService } from '@nebular/theme';
-import { UserService } from '../../../@core/data/users.service';
import { AnalyticsService } from '../../../@core/utils/analytics.service';
import { AuthService } from '../../../@core/auth';
-import { Router } from '@angular/router';
-import { tap } from 'rxjs/operators';
@Component({
selector: 'sam-header',
user = {};
- userMenu = [{ title: 'Log out', target: 'logout' }];
+ userMenu = [{ title: 'Log out', target: 'logout', link: '/auth/logout' }];
constructor(private menuService: NbMenuService,
- private userService: UserService,
private sidebarService: NbSidebarService,
private analyticsService: AnalyticsService,
- private authService: AuthService,
- private router: Router) {
+ private authService: AuthService) {
}
ngOnInit() {
startSearch() {
this.analyticsService.trackEvent('startSearch');
}
-
- menuItemClick(event) {
- if (event.target === 'logout') {
- this.authService.logout().subscribe();
- this.router.navigate(['/auth/login']);
- }
- }
}
export * from './header/header.component';
export * from './footer/footer.component';
export * from './search-input/search-input.component';
+export * from './logout/logout.component';
--- /dev/null
+import { Component, OnInit } from '@angular/core';
+import { AuthService } from '../../../@core/auth';
+import { Router } from '@angular/router';
+
+@Component({
+ selector: 'sam-logout',
+ template: ``,
+})
+export class LogoutComponent implements OnInit {
+ constructor(private authService: AuthService, private router: Router) { }
+
+ ngOnInit() {
+ this.authService.logout().subscribe();
+ this.router.navigate(['/auth/login']);
+ }
+}
NbThemeModule,
NbUserModule,
NbCheckboxModule,
+ NbContextMenuModule,
} from '@nebular/theme';
import {
FooterComponent,
HeaderComponent,
SearchInputComponent,
+ LogoutComponent,
} from './components';
import { CapitalizePipe, PluralPipe, RoundPipe, TimingPipe, ChunksPipe } from './pipes';
NbSidebarModule,
NbCheckboxModule,
NgbModule,
+ NbContextMenuModule,
];
const COMPONENTS = [
FooterComponent,
SearchInputComponent,
MainLayoutComponent,
+ LogoutComponent,
];
const PIPES = [
import { ExtraOptions, RouterModule, Routes } from '@angular/router';
import { NgModule } from '@angular/core';
import { AuthGuardService } from './@core/auth/auth-guard.service';
+import { LogoutComponent } from './@theme/components';
import {
NbAuthComponent,
NbRegisterComponent,
path: 'register',
component: NbRegisterComponent,
},
+ {
+ path: 'logout',
+ component: LogoutComponent,
+ },
],
},
{ path: '', redirectTo: 'home', pathMatch: 'full' },
import { AppRoutingModule } from './app-routing.module';
import { ThemeModule } from './@theme/theme.module';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
-import { NB_AUTH_TOKEN_WRAPPER_TOKEN, NbAuthJWTToken } from '@nebular/auth';
+import { NB_AUTH_TOKEN_CLASS, NbAuthJWTToken } from '@nebular/auth';
import { AuthGuardService, AuthService } from './@core/auth';
@NgModule({
useValue: '/',\r
},
{
- provide: NB_AUTH_TOKEN_WRAPPER_TOKEN,
- useClass: NbAuthJWTToken,\r
+ provide: NB_AUTH_TOKEN_CLASS,
+ useValue: NbAuthJWTToken,
},
AuthGuardService,
AuthService,