因为之前遇到一个问题,有人不经过前台页面直接通过访问接口,多次提现,所以为了安全起见,想到用身份验证。
为什么需要身份验证
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)
3、在需要身份验证的provider中引入HttpClientProvider
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 }); } }
如图所示,需要身份验证的,用http中的方法,也就是我们自定义的方法;不需要身份验证的,用http_1,也就是默认的http方法。
4、加上了身份验证以后,我们还想让验证不用过时,回到登录页面,重新登录。因为验证不通过时报401错误,我们前台怎么判断这个错误,并给出判断出错误后该执行什么方法呢?
相关文章http://blog.youkuaiyun.com/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前台需要做的内容,希望对大家有所帮助!