从第二个设备登录时,用户在第一个设备上保持记录状态

时间:2018-04-16 07:37:10

标签: android authentication interceptor

我有这个拦截器用于发送自动令牌并捕获错误:

public class AuthHeaderInterceptor implements Interceptor {

    private final UserStorage userStorage;

    public AuthHeaderInterceptor(UserStorage userStorage) {
        this.userStorage = userStorage;
    }

    @Override
    public Response intercept(@NonNull Chain chain) throws IOException {
        String authToken = userStorage.getUserProfile().getAuthToken();
        Request request = chain.request().newBuilder().addHeader("X-Authorization", authToken).build();

        try {
            Response response = chain.proceed(request);
            if (response.code() == 401) {
                throw new IOException("Authorization token is missing");
            }
            if (response.code() == 403) {
                throw new IOException("Invalid authorization token");
            }
            return response;
        } catch (ConnectException e) {
            throw new IOException("Error connecting to server");
        } catch (SocketTimeoutException e) {
            throw new IOException("Connection timeout");
        }
    }
}

当来自其他设备authToken的用户登录在服务器上更改并且第一个用户处于登录状态时。当第一个用户尝试发出som请求或尝试注销时,他会收到403错误。我想接下来 - 当用户得到403错误时,我想要清除用户数据并将用户重定向到loggin活动。我有两个问题:

  1. 我如何将用户从AuthHeaderInterceptor重定向到另一项活动(StartActivity)?

  2. 我想要的一切都正确吗?如何做到这一点?

1 个答案:

答案 0 :(得分:0)

使用 RxAndroid 进行改造可以简化此过程。使用像dagger这样的依赖注入器,以便使用Inversion of Control抽象出[任何]的重定向(作为第一个要求)。