localstorage - ¿Cómo almacenar token en almacenamiento local o de sesión en Angular 2?
session angular 5 (9)
Quiero usar el almacenamiento local o de sesión para guardar el token de autenticación en
angular 2.0.0.
Uso
angular2-localstorage
pero solo funciona
angular 2.0.0-rc.5
y cuando lo usé en 2.0.0 a través de mí Error de
tipo
.
Quiero usar el almacenamiento local predeterminado de Angular 2.0.0.
podemos almacenar almacenamiento de sesión así
token de tienda debe ser como
localStorage.setItem(''user'', JSON.stringify({ token: token, username: username }));
Almacenar sesión en sesión
Puede almacenar tanto la cadena como la matriz en el almacenamiento de la sesión
Cadena Ej.
let key = ''title'';
let value = ''session'';
sessionStorage.setItem(key, value);
Array Ex.
let key = ''user'';
let value = [{''name'':''shail'',''email'':''[email protected]''}];
value = JSON.stringify(value);
sessionStorage.setItem(key, value);
Obtener sesión almacenada de sessionStorage por clave
const session = sessionStorage.getItem(''key'');
Eliminar sesión guardada de sessionStorage por clave
sessionStorage.removeItem(''key'');
Eliminar todas las sesiones guardadas de sessionStorage
sessionStorage.clear();
- almacenamiento local debe ser como
Almacenar artículos en localStorage
Puede almacenar cadenas y matrices en el almacenamiento de ubicación
Cadena Ej.
let key = ''title'';
let value = ''session'';
localStorage.setItem(key, value);
Array Ex.
let key = ''user'';
let value = [{''name'':''shail'',''email'':''[email protected]''}];
value = JSON.stringify(value);
localStorage.setItem(key, value);
Obtenga elementos almacenados de localStorage por clave
const item = localStorage.getItem(''key'');
Eliminar sesión guardada de localStorage por clave
localStorage.removeItem(''key'');
Eliminar todos los elementos guardados de localStorage
localStorage.clear();
Agregando a la respuesta de Bojan Kogoj:
En su app.module.ts, agregue un nuevo proveedor para el almacenamiento.
@NgModule({
providers: [
{ provide: Storage, useValue: localStorage }
],
imports:[],
declarations:[]
})
Y luego puede usar DI para obtenerlo donde lo necesite.
@Injectable({
providedIn:''root''
})
export class StateService {
constructor(private storage: Storage) { }
}
Aquí está la mejor práctica: ng2-webstorage
Lo usé en AngularJs, ahora con Angular2. Muy útil.
Como regla general, el token no debe almacenarse en
localStorage
ni en
sessionStorage
.
JS puede acceder a ambos lugares y JS no debería preocuparse por el token de autenticación.
En mi humilde opinión, el token debe almacenarse en una cookie con el
HttpOnly
and
Secure
como se sugiere aquí:
stormpath.com/blog/…
Ejemplo simple:
var userID = data.id;
localStorage.setItem(''userID'',JSON.stringify(userID));
Eso depende totalmente de lo que necesitas exactamente. Si solo necesita almacenar y recuperar un token para usarlo en sus solicitudes http, le sugiero que simplemente cree un servicio y lo use en todo su proyecto.
ejemplo de integración básica:
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;
}
}
Sin embargo, si necesita utilizar el almacenamiento local con más frecuencia, por ejemplo, utilizando los valores almacenados en las vistas de su aplicación. Puede usar una de las bibliotecas que proporciona un contenedor de los almacenes web como lo hizo con angular2-localstorage.
ng2-webstorage hace unos meses ng2-webstorage que debería responder a sus necesidades. Proporciona dos servicios ng2 y dos decoradores para sincronizar los valores del almacenamiento web y los atributos del servicio / componente.
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
}
}
Guardar en almacenamiento local
localStorage.setItem(''currentUser'', JSON.stringify({ token: token, name: name }));
Carga desde almacenamiento local
var currentUser = JSON.parse(localStorage.getItem(''currentUser''));
var token = currentUser.token; // your token
Para obtener más información, le sugiero que siga este tutorial: Angular 2 JWT Authentication Example & Tutorial
import { Injectable,OpaqueToken } from ''@angular/core''; export const localStorage = new OpaqueToken(''localStorage'');
Coloque estas líneas en la parte superior del archivo, debería resolver el problema.
var arr=[{"username":"sai","email":"[email protected],"}]
localStorage.setItem(''logInArr'', JSON.stringfy(arr))