在下一个活动中改进身份验证

时间:2018-01-31 23:01:53

标签: android retrofit http-token-authentication

我的第一个活动是用于此目的的最简单形式和硬编码凭据的登录活动。 POST请求被发送到API,结果返回令牌。一切正常。现在我实现它的方式是我有一个意图放在login方法内的onClick事件中的onSuccess方法中。这是代码:

Login login = new Login("{hardcodedEmail}", "{hardcodedPassword}");
Call<User> call = userClient.login(login);
call.enqueue(new Callback<User>() {
    @Override
    public void onResponse(Call<User> call, Response<User> response) {
        Toast.makeText(MainActivity.this, response.body().getToken(), Toast.LENGTH_LONG).show();
        String token = response.body().getToken();
        Intent i = new Intent(MainActivity.this, TestActivity.class);
        startActivity(i);
   }

   @Override
   public void onFailure(Call<User> call, Throwable t) {
       Toast.makeText(MainActivity.this, "Error: \n" + t.getMessage(), Toast.LENGTH_LONG).show();
   }
});

这段代码有一个简单的干杯向我展示令牌,并说一切都好。这样做,我在这个页面上没有任何错误。但是在下一页上,我正在尝试从API中检索一些数据并显示它,但我收到错误401或未经授权的访问。这意味着我的凭据没有留下。

除了直接跳到下一个活动以保持凭证存活之外,还有什么我需要做的吗?

1 个答案:

答案 0 :(得分:0)

您可以将token string通过IntentMainActivity传递到TestActivity。随意试试这个:

call.enqueue(new Callback<User>() {
    @Override
    public void onResponse(Call<User> call, Response<User> response) {
        .....

        String token = response.body().getToken();
        Intent i = new Intent(MainActivity.this, TestActivity.class);

        // pass token string through Intent
        i.putExtra("TOKEN_STRING", token);

        startActivity(i);
   }

然后在TestActivity中,从Intent获取令牌传递:

// declare token as member variable
private String token;

@Override
public void onCreate(Bundle savedInstanceState) {
    .....

    Intent intent = getIntent();
    this.token = intent.getStringExtra("TOKEN_STRING");

    // you can do whatever you want with token later
    // eg: use token for authentication when issue next network call

    ....
}