首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储不存储(AuthHttp)

存储不存储(AuthHttp)
EN

Stack Overflow用户
提问于 2018-03-30 23:50:54
回答 1查看 33关注 0票数 0

存储不再设置我的id_token

它一直在工作,我试图从api中插入一个图像just,但过了一段时间它就停止工作了。我没有得到任何错误,并尝试了所有的方法。My console.log in the this.storage.get('id_token').then(token => { ... });不执行任何操作。

在overview.ts文件中,我执行了相同的检查(从存储中获取'id_token‘)来输入(ionViewCanEnter)。

它只能在我安卓设备上的ionic dev应用程序上工作(推送页面),但.apk和浏览器版本似乎不知何故出了问题。

下面是所需的代码块

LoginService.ts

代码语言:javascript
复制
import { Http } from '@angular/http';
import { Storage } from '@ionic/storage';
import { Injectable } from '@angular/core';
import { App } from 'ionic-angular';
import 'rxjs/add/operator/map';

@Injectable()
export class LoginServiceProvider {

apiUrl = 'https://api.example.be';  

constructor(public http: Http, public storage: Storage, public appCtrl: App) {
}

login(body) {

    return new Promise((resolve, reject) => {
        this.http.post(this.apiUrl+'/get_token', body)
        .subscribe(data => {

            let token = data.json();
            this.storage.set('id_token', token);

            this.storage.get('id_token').then(token => {
                    console.log('got token');
                if(token) {
                    console.log('token exists');
                } else {
                    console.log('token does not exist');
                }
            });

        })
    });
  }

}

Login.ts

代码语言:javascript
复制
import { LoginServiceProvider } from './../../providers/login-service/login-service';
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { RegisterPage } from '../register/register';
import { OverviewPage } from '../overview/overview';
import { Storage } from '@ionic/storage';
import { LoadingController } from 'ionic-angular';

@Component({
  selector: 'page-login',
  templateUrl: 'login.html'
})
export class LoginPage {
  userData;
  apiUrl = 'https://api.example.be';  

  constructor(public navCtrl: NavController, private loginService: LoginServiceProvider, public storage: Storage, public loadingCtrl: LoadingController) {

  }

  login() {

    this.loginService.login({email: "email@example.com", password: "examplepass"});

    return this.storage.get('id_token').then(token => {

     this.loadingCtrl.create({

        content: 'Logging in...',
        duration: 1000,
        dismissOnPageChange: true

      }).present();

      setTimeout(() => {

          // Does not work anymore
          this.navCtrl.push(OverviewPage).catch(err => {
          console.log('not allowed!');
        });

      }, 1000);


    });
  }

  goToRegister() {
    this.navCtrl.push(RegisterPage);
  }

  forgotPassword() {

  }
}

login.html (重要的是什么)

代码语言:javascript
复制
<button ion-button full color="orange" (click)="login()">Login</button>

app.module.ts

代码语言:javascript
复制
import { BrowserModule } from '@angular/platform-browser';
import { ErrorHandler, NgModule } from '@angular/core';
import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';
import { SplashScreen } from '@ionic-native/splash-screen';
import { StatusBar } from '@ionic-native/status-bar';

import { MyApp } from './app.component';
import { OverviewPage } from '../pages/overview/overview';
import { LoginPage } from '../pages/login/login';
import { ProfilePage } from '../pages/profile/profile';
import { ProfilePageModule } from '../pages/profile/profile.module';



import { AuthHttp, AuthConfig } from 'angular2-jwt';
import { Http } from '@angular/http';
import { HttpModule } from '@angular/http';
import { HttpClientModule } from '@angular/common/http';
import { Storage, IonicStorageModule } from '@ionic/storage';
import { LoginServiceProvider } from '../providers/login-service/login-service';


export function getAuthHttp(http, storage) {

  return new AuthHttp(new AuthConfig({
    noJwtError: true,
    globalHeaders: [{'Accept': 'application/json'}],
    tokenGetter: (() => storage.get('id_token')),
  }), http);
}

@NgModule({
  declarations: [
    MyApp,
    LoginPage,
    OverviewPage  
  ],
  imports: [
    BrowserModule,
    IonicModule.forRoot(MyApp),
    HttpModule,
    HttpClientModule,
    IonicStorageModule.forRoot(),
    ProfilePageModule
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    OverviewPage,
    LoginPage,
    ProfilePage
  ],
  providers: [
    StatusBar,
    SplashScreen,
    {provide: ErrorHandler, useClass: IonicErrorHandler},
    {
      provide: AuthHttp,
      useFactory: getAuthHttp,
      deps: [Http, Storage]
    },
    LoginServiceProvider
  ]
})
export class AppModule {}
EN

回答 1

Stack Overflow用户

发布于 2018-04-04 15:49:26

已解决

可能是存储的令牌有问题,不需要调整一行代码,一切都可以正常工作。令牌可能已经过期,存储必须设置一个新的令牌,这很奇怪,但我很高兴它又能工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49577390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档