android 令牌机制,Retrofit系列文章翻译3—Android上的令牌认证

原文链接:https://futurestud.io/blog/retrofit-token-authentication-on-android

本文是Retrofit系列文章的第三篇。本节介绍了 Retrofit 如何集成基于令牌验证的API到你的Android项目。下面的列表显示了该系列的所有文章:

Retrofit 系列目录

本篇在上一篇 Android上的基本认证 的基础上使用了 Retrofit 的 OAuth APIs(不是下一篇才会讲吗? 译者注). 我们将涵盖本话题.

集成令牌认证

如果你阅读了上一篇关于Retrofit 认证的文章, 那么你应该猜出我们将做什么: 扩展 ServiceGenerator 类 — 集成一个处理令牌认证的方法. 那就让我们开始扩展 ServiceGenerator 类的第二个 createService 方法吧(原来的第二个方法呢? 感觉这里没表达清楚, 译者注):

Retrofit 1.9

public class ServiceGenerator {

public static final String API_BASE_URL = "https://your.api-base.url";

private static RestAdapter.Builder builder = new RestAdapter.Builder()

.setEndpoint(API_BASE_URL)

.setClient(new OkClient(new OkHttpClient()));

public static S createService(Class serviceClass) {

return createService(serviceClass, null);

}

public static S createService(Class serviceClass, final String authToken) {

if (authToken != null) {

builder.setRequestInterceptor(new RequestInterceptor() {

@Override

public void intercept(RequestFacade request) {

request.addHeader("Authorization", authToken);

}

});

}

RestAdapter adapter = builder.build();

return adapter.create(serviceClass);

}

}

Retrofit 2

public class ServiceGenerator {

public static final String API_BASE_URL = "https://your.api-base.url";

private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

private static Retrofit.Builder builder =

new Retrofit.Builder()

.baseUrl(API_BASE_URL)

.addConverterFactory(GsonConverterFactory.create());

public static S createService(Class serviceClass) {

return createService(serviceClass, null);

}

public static S createService(Class serviceClass, final String authToken) {

if (authToken != null) {

httpClient.addInterceptor(new Interceptor() {

@Override

public Response intercept(Interceptor.Chain chain) throws IOException {

Request original = chain.request();

// Request customization: add request headers

Request.Builder requestBuilder = original.newBuilder()

.header("Authorization", authToken)

.method(original.method(), original.body());

Request request = requestBuilder.build();

return chain.proceed(request);

}

});

}

OkHttpClient client = httpClient.build();

Retrofit retrofit = builder.client(client).build();

return retrofit.create(serviceClass);

}

}

正如你见到的, 我们将认证令牌做为String变量传进方法, 使用RequestInterceptor( Retrofit 2 中是Interceptor) 来设置 HTTP Authorization 头部域. 如果你是用的是另一个 HTTP 头部域来存储认证令牌, 或者调整上述代码或者创建一个新方法来处理需要的功能.

就是这样 :)

从现在开始, 每一个用此方法创建的 HTTP 客户端都在Authorization头部域集成了令牌并且自动将令牌传送到你的请求的 API 端点.

用法示例

让我们创建一个示例并写一点代码. 下列的UserService接口声明了一个me()方法. 这个例子方法返回API响应创建的user对象.

Retrofit 1.9

public interface UserService {

@POST("/me")

User me();

}

Retrofit 2

public interface UserService {

@POST("/me")

Call me();

}

假设你将要调用的API 在端点http://your.api-base.url/me等待所有请求并需要认证来获取响应的用户数据. 现在, 让我们创建一个UserService`接口来做实际的请求.

Retrofit 1.9

UserService userService =

ServiceGenerator.create(UserService.class, "auth-token");

User user = userService.me();

Retrofit 2

UserService userService =

ServiceGenerator.create(UserService.class, "auth-token");

Call call = userService.me();

User user = call.execute().body();

这个代码只是说明如何使用现成的类. 当然, 你必须传送你的实际的认证令牌给ServiceGenerator 方法.

祝您使用 Retrofit 的API 认证 编程愉快. 如果你遇到了任何问题, 请联系我们 @futurestud_io.

本篇结束, 感觉比上一篇还简单啊 :) 译者注

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值