我正在尝试使用离子存储来保存和加载用于访问 APP 中的后端 API 的身份验证令牌,但我无法从存储中获取值。
我已经安装了离子存储(Angular 版本),如组件 GH 页面所示:https ://github.com/ionic-team/ionic-storage ,使用以下命令:
npm install @ionic/storage-angular
然后我在我的 Globals 服务中导入了存储服务,我创建它是为了成为我的应用程序中所有全局值的中心:
import { Storage } from '@ionic/storage-angular';
@Injectable()
export class Globals {
private _authenticationToken: string;
constructor(private storage: Storage) {
this._authenticationToken = null;
this.storage.create();
}
(...)
然后我创建了一个 saveToken 方法,它将已经_authenticationToken
由另一种方法定义的身份验证令牌存储在离子存储中:
public saveToken() : Promise<void>
{
console.log("Saving token");
console.log(this._authenticationToken);
return this.storage.set("AuthenticationToken", this._authenticationToken)
.then(valor => console.log("token saved."));
}
当我执行该saveToken
方法时,结果是这样的(忽略红色的行,它们来自其他进程,因为 saveToken 是异步的):
所以我的令牌被保存了,我可以在 Chrome 开发工具的应用程序选项卡中看到它的值:
但问题来了。当我尝试使用下面的方法加载保存的令牌时,我得到一个空值返回,就好像令牌没有保存一样。当应用程序再次打开时,我正在这样做,以恢复登录会话。
public loadToken() : Promise<void>
{
return this.storage.get("AuthenticationToken")
.then(v => {
console.log("token loaded");
console.log(v);
this.setToken(v);
});
}
上面的代码将产生以下消息,表明没有从存储返回值。
我正在使用 chrome 浏览器运行应用程序ionic serve
,并认为在应用程序重新加载后存储可能会重置,但我已经检查了应用程序选项卡并且身份验证令牌在那里。