J'ai réussi à obtenir une solution décente en utilisant la TokenAuthenticator et un intercepteur et je pensais que je partage l'idée que cela puisse aider d'autres. Ajout de la classe 'TokenInterceptor' qui gère l'ajout du jeton à l'en-tête, le jeton existe, et la classe 'TokenAuthenticator' gère le cas lorsqu'il n'y a pas de jeton, et nous devons en générer un.
Je suis sûr qu'il existe de meilleures façons de mettre en œuvre cela, mais c'est un bon point de départ, je pense.
public static class TokenAuthenticator implements Authenticator {
@Override
public Request authenticate(Route route, Response response) throws IOException {
...
Session body = call.execute().body();
Logger.d("Session token: " + body.token);
// Storing the token somewhere.
session.token = body.token;
...
}
private static class TokenInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
// Nothing to add to intercepted request if:
// a) Authorization value is empty because user is not logged in yet
// b) There is already a header with updated Authorization value
if (authorizationTokenIsEmpty() || alreadyHasAuthorizationHeader(originalRequest)) {
return chain.proceed(originalRequest);
}
// Add authorization header with updated authorization value to intercepted request
Request authorisedRequest = originalRequest.newBuilder()
.header("Auth-Token", session.token)
.build();
return chain.proceed(authorisedRequest);
}
}
Source:
http://lgvalle.xyz/2015/07/27/okhttp-authentication/
êtes-vous que le gson est configuré de manière peut comprendre votre classe de session? – gropapa
Appeler emailLogin (...) fonctionne de manière asynchrone, donc je ne pense pas que ce soit un problème avec le gson. Y at-il un moyen facile de dire ce qui ne va pas avec cet appel? Je ne peux pas voir d'erreurs, ou quoi que ce soit. –