ionic2 身份验证

因为之前遇到一个问题,有人不经过前台页面直接通过访问接口,多次提现,所以为了安全起见,想到用身份验证。

为什么需要身份验证

1、我们不加身份认证,匿名用户可以直接通过url随意访问接口
2、增加了身份认证之后,只有带了我们访问票据的请求才能访问我们的接口

具体可以参考http://www.cnblogs.com/landeanfen/p/5287064.html
但是该链接的前台用的是jquary的写法,在ionic2中我们要稍作修改(参考https://stackoverflow.com/questions/34464108/angular2-set-headers-for-every-request)


1、用命令ionic cordova g provider httpClient添加一个服务
2、该服务是重新建议一个http服务,使在请求时加上Authorization(默认的http服务是不需要传 Authorization
import { Injectable } from '@angular/core';
import {Http, Headers} from '@angular/http';

@Injectable()
export class HttpClientProvider {
  constructor(public http: Http) {}

  createAuthorizationHeader(headers: Headers) {
    headers.append('Authorization', 'BasicAuth ' +'xxxxxxxxxxxxx');
  }

  get(url,data) {
    let headers = new Headers();
    this.createAuthorizationHeader(headers);
    return this.http.get(url, {
      headers: headers,
      params:data.params
    });
  }

  post(url, data) {
    let headers = new Headers();
    this.createAuthorizationHeader(headers);
    return this.http.post(url, data, {
      headers: headers
    });
  }
}
3、在需要身份验证的provider中引入HttpClientProvider

ionic2 身份验证_第1张图片


如图所示,需要身份验证的,用http中的方法,也就是我们自定义的方法;不需要身份验证的,用http_1,也就是默认的http方法。

4、加上了身份验证以后,我们还想让验证不用过时,回到登录页面,重新登录。因为验证不通过时报401错误,我们前台怎么判断这个错误,并给出判断出错误后该执行什么方法呢?

相关文章http://blog.csdn.net/yy228313/article/details/72636895

我们在HttpClientProvider中加入一下方法

dealError(error:any){
  let errMsg = (error.message)?error.message:
      error.status?'${error.status}-{error.statusText}':'Server error';
  if(error.status==401||error.status==500){
    console.log('验证不通过')
  }
  return Observable.throw(errMsg);
}
5、在需要身份验证的provider中,如下所示,引入dealError()方法

//通过用户ID获取用户信息
getUserById(user_id:string):Observable<any>{
    return this.http.get(this.coreService.baseUrl+'/Inf_User/GetUserByID',{params:{user_id:user_id}})
        .map(res=>res.json()).catch(data=>this.http.dealError(data));
}


以上是http://www.cnblogs.com/landeanfen/p/5287064.html的改进,当后台传给我们一个身份验证的票据时,ionic2前台需要做的内容,希望对大家有所帮助!

你可能感兴趣的:(前端开发,ionic2)