私は新しいプログラマです。トークンベースの認可のためにアンドロイドでRetrofitを使用したいと思っていたので、チュートリアル(https://www.sitepoint.com/retrofit-a-simple-http-client-for-android-and-java/)に従いました。チュートリアルはPHPサーバでした)。しかし、私はトークンがプログラムにどこに保存されているのか、それをどうやって入手するのか分かりません。それは単にアンドロイドコンソールに表示されます。私は私のアンドロイドプログラムでトークンを解読する必要があります。しかし、トークンはAndroidのコンソールに表示されます。更新:トークンを取得するにはどうすればいいですか?
com.example.programmingknowledge.login D/Retrofit: {"auth_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJuYW1lIjpudWxsLCJlbWFpbCI6ImV4YW1wbGVAbWFpbC5jb20iLCJleHAiOjE0NzMwMzU1MTF9.bhJABvEgtRISZVJ0DejjEtrGJyXzNV6PO0YGQ71xHRc"}
アンドロイドアプリでトークンを取得するにはどうすればよいですか?何か案が?ここで
は私のインタフェースである:ここでは
public interface Interface {
//This method is used for "POST"
@FormUrlEncoded
//@POST("/api.php")
@POST("/")
void postData(@Field("method") String method,
@Field("email") String username,
@Field("password") String password,
Callback<ServerResponse> serverResponseCallback);
//This method is used for "GET"
//@GET("/api.php")
@GET("/")
void getData(@Query("method") String method,
@Query("email") String username,
@Query("password") String password,
Callback<ServerResponse> serverResponseCallback);
}
は私が使用コミュニケータ(メソッドで更新)からのコードです:
import android.util.Log;
import com.squareup.otto.Produce;
import retrofit.Callback;
import retrofit.RestAdapter;
import retrofit.RetrofitError;
import retrofit.client.Response;
public class Communicator {
private static final String TAG = "Communicator";
private static final String SERVER_URL = "http://10.0.2.2:3000/authenticate";
public void loginPost(String email, String password){
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(SERVER_URL)
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
Interface communicatorInterface = restAdapter.create(Interface.class);
//HERE I PLACED THE METHOD, BUT HOW CAN I GET THE AUTH-TOKEN WITH THIS METHOD? I want to save it somewhere
communicatorInterface = ServiceGenerator.createService(Interface.class, "auth-token");
Callback<ServerResponse> callback = new Callback<ServerResponse>() {
@Override
public void success(ServerResponse serverResponse, Response response2) {
if(serverResponse.getResponseCode() == 0){
BusProvider.getInstance().post(produceServerEvent(serverResponse));
}else{
BusProvider.getInstance().post(produceErrorEvent(serverResponse.getResponseCode(), serverResponse.getMessage()));
}
}
@Override
public void failure(RetrofitError error) {
if(error != null){
Log.e(TAG, error.getMessage());
error.printStackTrace();
}
BusProvider.getInstance().post(produceErrorEvent(-200,error.getMessage()));
}
};
communicatorInterface.postData("login", email, password, callback);
}
public void loginGet(String email, String password){
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(SERVER_URL)
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
Interface communicatorInterface = restAdapter.create(Interface.class);
Callback<ServerResponse> callback = new Callback<ServerResponse>() {
@Override
public void success(ServerResponse serverResponse, Response response2) {
if(serverResponse.getResponseCode() == 0){
BusProvider.getInstance().post(produceServerEvent(serverResponse));
}else{
BusProvider.getInstance().post(produceErrorEvent(serverResponse.getResponseCode(), serverResponse.getMessage()));
}
}
@Override
public void failure(RetrofitError error) {
if(error != null){
Log.e(TAG, error.getMessage());
error.printStackTrace();
}
BusProvider.getInstance().post(produceErrorEvent(-200,error.getMessage()));
}
};
communicatorInterface.getData("login", email, password, callback);
}
@Produce
public ServerEvent produceServerEvent(ServerResponse serverResponse) {
return new ServerEvent(serverResponse);
}
@Produce
public ErrorEvent produceErrorEvent(int errorCode, String errorMsg) {
return new ErrorEvent(errorCode, errorMsg);
}
}
そして、ここでは私のServiceGeneratorクラスは
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> S createService(Class<S> serviceClass) {
return createService(serviceClass, null);
}
public static <S> S createService(Class<S> 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);
}
}
ありがとうございます。このメソッドを呼び出しますか?私は自分の投稿にコミュニケータコードを掲載しました。どこか? – Peter
メソッドをクラスに配置するだけで、ログイン後にauthorizatizingすることで呼び出されます。 – machei
hm私はそれを取得しない、このメソッドは何も戻って、どのように私はこのトークンを取得できますか?私の投稿のupdateを参照してください。createServiceメソッドを配置しました – Peter