android - Github Basic Auth with username+password+code using Retrofit Android
问题描述
我正在尝试制作一个应用程序,该应用程序将通过 github REST API 列出用户的所有 github 存储库公共/私有。
这是用于改造的 GithubService。
public interface GithubService {
@GET("user")
Call<User> getUser(@Header("Authorization") String authHeader);
@GET("users/{user}/repos")
Call<List<GitHubRepo>> userRepos(@Header("Authorization") String authHeader, @Path("user") String userId);}
我有一个登录表单,其中包含用户名和用户的个人访问令牌作为密码,这是我用于请求用户信息的代码,它返回有效的用户信息:
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY));
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.client(clientBuilder.build())
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
GithubService service = retrofit.create(GithubService.class);
String cred = Credentials.basic(username, password);
service.getUser(cred).enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
Log.d(TAG, "onResponse: " + response.isSuccessful());
fetchRepos(password, response.body());
}
@Override
public void onFailure(Call<User> call, Throwable t) {
Log.d(TAG, "onFailure: " + t.getMessage());
}
});
在 fetchRepos 中,我尝试使用个人访问令牌作为 auth 标头来请求用户 repos,但它返回 null,这是代码:
private void fetchRepos(String pat, User user) {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY));
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.client(clientBuilder.build())
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
GithubService service = retrofit.create(GithubService.class);
service.userRepos(pat, user.getLogin()).enqueue(new Callback<List<GitHubRepo>>() {
@Override
public void onResponse(Call<List<GitHubRepo>> call, Response<List<GitHubRepo>> response) {
Log.d(TAG, "onResponse: " + response.isSuccessful());
}
@Override
public void onFailure(Call<List<GitHubRepo>> call, Throwable t) {
}
});
}
我在这里错在哪里?如何继续授权请求用户回购以及如何将两因素代码集成到授权中?
解决方案
推荐阅读
- java - 如何修复 ClassCastException:在 javax.ws.rs-api RuntimeDelegate.class
- javascript - 通过ajax 发布到php 时未定义的数据?
- python - 为什么我在函数中的附加数据框不起作用?
- assembly - 子程序引起的汇编程序中的分段错误
- c# - 如何在 Visual C# 中将字符串组织到表格中?
- r - 如何在 R 中计算二项式实验的 PDF
- matlab - 无法在matlab中用ezplot绘制圆
- c - 重复程序提示
- verification - Kripke 结构可以有守卫吗?
- javascript - mousedown 事件上的 SVG 路径移动到鼠标单击点