2016-11-10 41 views
10

Düğümler için evrensel başlatıcı indirdim ve web sitemi eski angular-rc4'ten geçirmeye başladım. Ancak, kimlik doğrulamayı uygulamak zorunda kaldığımda (eğer durumumda, localStorage'da depolanan JWT), sunucu, localStorage ve cookie'lere sahip değildir, böylece açısal işlem yalnızca istemcide gerçekleşir.Açısal 2 evrensel kimlik doğrulaması, nodejs

Bu kılavuzu takip ediyorum: https://github.com/angular/universal-starter/issues/148 ama işe yaramadı.

authentication.services.ts

import { OpaqueToken } from '@angular/core'; 

export let AUTH_SERVICES = new OpaqueToken('auth.services'); 

export interface AuthenticationService { 

    forgotPassword(email: any); 

    isAuthenticated(); 

    getCurrentUser(); 

    refreshToken(); 

    signin(user : any); 

    signout(); 

    signup(user : any); 

} 

server.authentication.ts

import { Injectable } from '@angular/core'; 

import { AuthenticationService } from './authentication.services'; 

@Injectable() 
export class ServerAuthenticationService implements AuthenticationService { 
    forgotPassword(email: any) { 
     throw new Error('Forgot password cannot be called while doing server side rendering'); 
    } 

    isAuthenticated() { 
     return false; 
    } 

    getCurrentUser(){ 
     if(this.isAuthenticated()) { 
      return {}; 
     } 
     return {}; 
    } 

    refreshToken() { 

    } 

    signin(user : any) { 
     throw new Error('Login cannot be called while doing server side rendering'); 
    } 

    signout() { 
     throw new Error('Logout cannot be called while doing server side rendering'); 
    } 

    signup(user : any) { 
     throw new Error('Sign up cannot be called while doing server side rendering'); 
    } 
} 

clientAuthentication.services.ts

@Injectable() 
export class UserService implements AuthenticationService { 
    forgotPassword(email: any){ 
     // client implementation 
    } 

    isAuthenticated() { 
     // client implementation 
    } 

    getCurrentUser() { 
     // client implementation 
    } 

    refreshToken() { 
     // client implementation 
    } 

    signin(user : any){ 
     // client implementation 
    } 

    signout(){ 
     // client implementation 
    } 

    signup(user : any) { 
     // client implementation 
    } 
} 

app: Aşağıda

benim kodudur .b sunucuda vs bir yönlendirici geçiş yoluyla istemci üzerinde o sayfaya gezinirken rowser.module.ts

@NgModule({ 
    bootstrap: [ AppComponent ], 
    declarations: [ AppComponent ], 
    imports: [ 
    UniversalModule, // BrowserModule, HttpModule, and JsonpModule are included 
    FormsModule, 

    SharedModule, 
    HomeModule, 
    AboutModule, 

    NavbarModule, 

    AppRoutingModule 
    ], 
    providers: [ 
    { provide: 'isBrowser', useValue: isBrowser }, 
    { provide: 'isNode', useValue: isNode }, 

    { provide: 'LRU', useFactory: getLRU, deps: [] }, 
    { provide: AUTH_SERVICES, useFactory: UserService}, 
    CacheService 
    ] 

}) 

aynı sayfa çıkışı nasıl Sonra

@NgModule({ 
    bootstrap: [ AppComponent ], 
    declarations: [ AppComponent ], 
    imports: [ 
    UniversalModule, // NodeModule, NodeHttpModule, and NodeJsonpModule are included 
    FormsModule, 

    SharedModule, 
    HomeModule, 
    AboutModule, 

    NavbarModule, 

    AppRoutingModule 
    ], 
    providers: [ 
    { provide: 'isBrowser', useValue: isBrowser }, 
    { provide: 'isNode', useValue: isNode }, 

    { 
     provide: 'LRU', 
     useFactory: getLRU, 
     deps: [ 
     [new Inject('LRU'), new Optional(), new SkipSelf()] 
     ] 
    }, 
    { provide: AUTH_SERVICES, useFactory: ServerAuthenticationService }, 
    CacheService 
    ] 
}) 

app.node.module.ts bir tarayıcı yenileme yoluyla? Eğer tarayıcı modülünde sunucuda dayalı açısal Bunları uygulamada sizin açık uygulamada istek ve yanıt özelliklerini kullanabilir ve enjekte edilebilir düğümünde peşin

cevap

1

yılında

teşekkürler. request.cookies, KVPS'yi çerezlerinize göre eşleyen bir nesneye sahiptir. https://github.com/angular/universal-starter/blob/master/src/node.module.ts#L43 https://github.com/angular/universal-starter/blob/master/src/browser.module.ts#L52

kod yakında modası geçmiş olsun olabilir, ama prensip geçerlidir: bu konuda bazı (eski) örnekler için

burada ve buraya bak lütfen. Uygulamanızdaki sunucudaki isteği enjekte etmek için bağımlılık enjeksiyonunu kullanın ve tarayıcıya yönelik sürümde istek için (tarayıcı çerezlerini göstermeye devam eden) bir kestirici kullanın.