Je veux utiliser le stockage local ou de session pour enregistrer le jeton d'authentification dansangular 2.0.0.
J'utiliseangular2-localstorage
mais cela ne fonctionne que angular 2.0.0-rc.5 et quand je l'ai utilisé dans 2.0.0 à travers moi Type error. Je veux utiliser le stockage local par défaut de Angular 2.0.0.
Enregistrer dans un stockage local
localStorage.setItem('currentUser', JSON.stringify({ token: token, name: name }));
Charge depuis le stockage local
var currentUser = JSON.parse(localStorage.getItem('currentUser'));
var token = currentUser.token; // your token
Pour plus, je vous suggère de suivre ce tutoriel: Angular 2 Exemple d’authentification JWT & Tutorial
Cela dépend totalement de ce dont vous avez besoin exactement. Si vous avez juste besoin de stocker et de récupérer un jeton pour pouvoir l’utiliser dans vos requêtes http, je vous suggère simplement de créer un service et de l’utiliser dans votre ensemble. projet.
exemple d'intégration de base:
import {Injectable} from 'angular@core'
@Injectable()
export class TokenManager {
private tokenKey:string = 'app_token';
private store(content:Object) {
localStorage.setItem(this.tokenKey, JSON.stringify(content));
}
private retrieve() {
let storedToken:string = localStorage.getItem(this.tokenKey);
if(!storedToken) throw 'no token found';
return storedToken;
}
public generateNewToken() {
let token:string = '...';//custom token generation;
let currentTime:number = (new Date()).getTime() + ttl;
this.store({ttl: currentTime, token});
}
public retrieveToken() {
let currentTime:number = (new Date()).getTime(), token = null;
try {
let storedToken = JSON.parse(this.retrieve());
if(storedToken.ttl < currentTime) throw 'invalid token found';
token = storedToken.token;
}
catch(err) {
console.error(err);
}
return token;
}
}
Toutefois, si vous devez utiliser le stockage local plus souvent, utilisez les valeurs stockées dans les vues de vos applications, par exemple. Vous pouvez utiliser l’une des bibliothèques fournissant un wrapper des magasins Web, comme vous l’avez fait avec angular2-localstorage.
J'ai créé il y a quelques mois ng2-webstorage qui devrait répondre à vos besoins . Il fournit deux services ng2 et deux décorateurs pour synchroniser les valeurs du Webstorage et les attributs du service/composant.
import {Component} from '@angular/core';
import {LocalStorageService, LocalStorage} from 'ng2-webstorage';
@Component({
selector: 'foo',
template: `
<section>{{boundValue}}</section>
<section><input type="text" [(ngModel)]="attribute"/></section>
<section><button (click)="saveValue()">Save</button></section>
`,
})
export class FooComponent {
@LocalStorage()
boundValue; // attribute bound to the localStorage
value;
constructor(private storage:LocalStorageService) {
this.localSt.observe('boundValue')// triggers the callback each time a new value is set
.subscribe((newValue) => console.log('new value', newValue));
}
saveValue() {
this.storage.store('boundValue', this.value); // store the given value
}
}
Voici la meilleure pratique: https://github.com/PillowPillow/ng2-webstorage
Je l’utilisais dans AngularJs, maintenant avec Angular2. Très utile.
Exemple simple:
var userID = data.id;
localStorage.setItem('userID',JSON.stringify(userID));
import { Injectable,OpaqueToken } from '@angular/core';
export const localStorage = new OpaqueToken('localStorage');
Placez ces lignes en haut du fichier, cela devrait résoudre le problème.
Ajoutant à la réponse de Bojan Kogoj:
Dans votre app.module.ts, ajoutez un nouveau fournisseur pour le stockage.
@NgModule({
providers: [
{ provide: Storage, useValue: localStorage }
],
imports:[],
declarations:[]
})
Et vous pouvez ensuite utiliser DI pour l'obtenir où vous en avez besoin.
@Injectable({
providedIn:'root'
})
export class StateService {
constructor(private storage: Storage) { }
}
var arr=[{"username":"sai","email":"[email protected],"}]
localStorage.setItem('logInArr', JSON.stringfy(arr))
En règle générale, le jeton ne doit pas être stocké dans localStorage
ni dans sessionStorage
. Les deux emplacements sont accessibles à partir de JS et ce dernier ne doit pas se soucier du jeton d'authentification.
IMHO Le jeton doit être enregistré dans un cookie avec les indicateurs HttpOnly
et Secure
comme suggéré ici: https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage