【问题标题】:Angular 2 LocalStorage clears after refreshAngular 2 LocalStorage 刷新后清除
【发布时间】:2017-04-21 10:08:50
【问题描述】:

这里有点奇怪的小东西:)

所以我正在做的是在尝试登录用户时,我想存储 access_token 并在 localStorage 中过期。哪个工作“好”。但是,如果我刷新页面,如果我想在单击登录按钮后查看添加的令牌,那么令牌也会消失,我需要重新启动控制台(F12)才能看到它们。你能看到我做错了什么吗?

服务:

import { Injectable } from '@angular/core';
import { Headers, Http, Response } from '@angular/http';
import { AppSettings } from '../AppSettings.component';
import { Observable } from 'rxjs';

@Injectable()
export class UserService {

    private headers = new Headers({
        'Content-Type': 'application/json',
        'Cache-Control': 'no-cache'
    });

    constructor(private http: Http) {
    }

    loginUser(email: string, password: string, remember: boolean) {
        var data = {
            'email': email,
            'password': password,
            'client_id': AppSettings.CLIENT_ID,
            'client_secret': AppSettings.CLIENT_SECRET,
            'remember': remember
        };
        return this.http.post(AppSettings.HOST + 'auth/login', data, {headers: this.headers})
            .map(
                (response: Response) => {
                    const loginData = response.json().Result;
                    return loginData;
                })
            .do(
                responseData => {
                    localStorage.setItem('token', JSON.stringify(responseData.access_token));
                    localStorage.setItem('expires', JSON.stringify(responseData.expires));
                }
            );
    }
}

如果我刷新页面,所有令牌也都消失了。

package.json

"dependencies": {
    "@angular/common": "^2.4.8",
    "@angular/compiler": "^2.4.8",
    "@angular/core": "^2.4.8",
    "@angular/forms": "2.4.8",
    "@angular/http": "^2.4.8",
    "@angular/platform-browser": "^2.4.8",
    "@angular/platform-browser-dynamic": "^2.4.8",
    "@angular/router": "^3.4.8",
    "angular2-social-login": "^2.1.0",
    "core-js": "^2.4.1",
    "rxjs": "5.1.1",
    "zone.js": "^0.7.7"
  }

组件

import { Component } from '@angular/core';
import { UserService } from '../../services/user.service';
import { Response } from '@angular/http';

@Component({
    selector: 'login-layout',
    templateUrl: './app/views/login/login.component.html',
    providers: [ UserService ]
})

export class LoginComponent {
    user: {};
    email: string = '';
    password: string = '';
    remember: boolean;

    constructor(private _userService: UserService) {}

    loginForm() {
        this._userService.loginUser(this.email, this.password, this.remember).subscribe(
            responseData => console.log(responseData),
            error => console.log(error)
        );
    }


}

编辑:

好的,在 Firefox 上检查。即使在刷新后,令牌也会正确存储。好像是 Chrome 的问题。以前有其他人遇到过吗?

【问题讨论】:

  • 上面的代码好像没问题。当您的页面从某处的代码加载/启动时,您能否检查 localStorage 是否被清除?您是否使用隐身模式进行测试?

标签: javascript angular


【解决方案1】:

好的...发现访问localStorage跨浏览器需要使用localStorage["key"]的问题@

愚蠢的错误.... :)

更多信息可以在这个StackOverflow answer中找到

【讨论】:

  • 我只能在 2 天内接受这个答案,因为我是回答这个问题的人 :)
猜你喜欢
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 2015-09-15
  • 2021-02-26
  • 1970-01-01
  • 2021-03-19
  • 2018-12-04
相关资源
最近更新 更多