ngx-cookie
Implementation of Angular 1.x $cookies service to Angular
Table of contents:
Get Started
Installation
You can install this package locally with npm.
yarn add ngx-cookie
Usage
CookieModule
should be registered in angular module with withOptions()
static method.
These methods accept CookieOptions
objects as well. Leave it blank for the defaults.
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { CookieModule } from 'ngx-cookie';
import { AppComponent } from './app.component';
@NgModule({
imports: [ BrowserModule, CookieModule.withOptions() ],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
import { Component } from '@angular/core';
import { CookieService } from 'ngx-cookie';
@Component({
selector: 'my-very-cool-app',
template: '<h1>My Angular App with Cookies</h1>'
})
export class AppComponent {
constructor(private cookieService: CookieService){}
getCookie(key: string){
return this.cookieService.get(key);
}
}
Server Side Rendering
ngx-cookie
supports usage during Server Side Rendering (SSR / Angular Universal). Getting Server Side Rendering itself set up the first time can be tricky and is outside the scope of this guide. Here, we'll assume that you've got a working SSR setup similar to the Angular Universal Starter project, and you're just trying to get ngx-cookie
working with SSR.
Note: during normal, client side usage, ngx-cookie
manipulates the client cookies attached to the document
object. During SSR, ngx-cookie
will manipulate cookies in http request or response headers._
Setup
Install ngx-cookie-backend
library:
yarn add ngx-cookie-backend
# or
# npm install ngx-cookie-backend --save
Then edit app.server.module.ts
and add CookieBackendModule.withOptions()
to imports:
import { CookieBackendModule } from 'ngx-cookie';
@NgModule({
imports: [
AppModule,
ServerModule,
CookieBackendModule.withOptions()
],
bootstrap: [AppComponent]
})
export class AppServerModule {}
Next, we need to make providers for the 'REQUEST'
and 'RESPONSE'
objects created by the expressjs server during SSR. To do this, edit server.ts
to create providers for 'REQUEST'
AND 'RESPONSE'
.
server.get('*', (req, res) => {
res.render(indexHtml, {
req,
res,
providers: [
{provide: APP_BASE_HREF, useValue: req.baseUrl},
{provide: REQUEST, useValue: req},
{provide: RESPONSE, useValue: res}
]
});
});
And that's it! all your application's calls to CookieService
should now work properly during SSR!
Examples
Normal usage example is under projects/test-app
SSR usage example is under projects/backend-test-app
CookieService
There are 7 methods available in the CookieService
(6 standard methods from Angular 1 and 1 extra removeAll()
method for convenience)
get()
Returns the value of given cookie key.
get(key: string): string;
getObject()
Returns the deserialized value of given cookie key.
getObject(key: string): Object;
getAll()
Returns a key value object with all the cookies.
getAll(): any;
put()
Sets a value for given cookie key.
put(key: string, value: string, options?: CookieOptions): void;
putObject()
Serializes and sets a value for given cookie key.
putObject(key: string, value: Object, options?: CookieOptions): void;
remove()
Remove given cookie.
remove(key: string, options?: CookieOptions): void;
removeAll()
Remove all cookies.
removeAll(): void;
Options
Options object should be a type of CookieOptions
interface. The object may have following properties:
- path - {string} - The cookie will be available only for this path and its sub-paths. By default, this is the URL that appears in your
<base>
tag. - domain - {string} - The cookie will be available only for this domain and its sub-domains. For security reasons the user agent will not accept the cookie if the current domain is not a sub-domain of this domain or equal to it.
- expires - {string|Date} - String of the form "Wdy, DD Mon YYYY HH:MM:SS GMT" or a Date object indicating the exact date/time this cookie will expire.
- secure - {boolean} - If
true
, then the cookie will only be available through a secured connection. - sameSite - {"Lax"|"Strict"|"None"} - Designates cookie for first party (Lax|Strict) or third party contexts.
- httpOnly - {boolean} - If
true
, then the cookie will be set with the HttpOnly
flag, and will only be accessible from the remote server. Helps to prevent against XSS attacks. - storeUnencoded - {boolean} - If
true
, then the cookie value will not be encoded and will be stored as provided.