如何在android studio中存储访问令牌和刷新令牌?

ivqmmu1c  于 2023-01-02  发布在  Android
关注(0)|答案(2)|浏览(166)

我正在使用volley库为我的android任务实现rest API,我想知道如何保存令牌,因为每个其他API都需要访问和刷新令牌,我应该将其保存在数据库中吗?调用其他API时如何访问存储的令牌?
这是我的webApi课程

public void login(String email, String password, final APIListener listener) {
      String url = BASE_URL + "/oauth/token";
      JSONObject jsonObject = new JSONObject();

      try {
           JSONObject userJSON = new JSONObject();
           userJSON.put("email",email);
           userJSON.put("password", password);
           jsonObject.put("user",userJSON);
           jsonObject.put("grant_type", "password");

           Log.d("Json Object", jsonObject.toString());

           Response.Listener<JSONObject> successListener = new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                     try{
                          Log.d("th response",response.toString());

                         

                          Gson obj = new Gson();
                          Authentication authObj = obj.fromJson(response.toString(), Authentication.class);
                          Log.d("successObj",authObj.getSuccess());

                          listener.onLogin(authObj);
                     }
                     catch(Exception ex){
                          Log.e("Volley onResponse Error",ex.toString());
                          Toast.makeText(mApplication, "JSON exception", Toast.LENGTH_LONG).show();
                     }

                }
           };

           Response.ErrorListener errorListener = new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                     Log.e("Json Error Response",error.toString());
                     Toast.makeText(mApplication, "Invalid Login", Toast.LENGTH_LONG).show();

                }
           };

           JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, jsonObject, successListener, errorListener);



           mRequestQueue.add(request);
      }
      catch (JSONException exception){
           Log.e("Login exception",exception.getStackTrace().toString());
           Toast.makeText(mApplication, "JSON Exception", Toast.LENGTH_LONG).show();

      }

 }

这是活动课

//login
    EditText emailField = findViewById(R.id.email);
    EditText passwordField = findViewById(R.id.password);
    Button loginBtn = findViewById(R.id.LoginBtn);

    loginBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String email = emailField.getText().toString();
            String password = passwordField.getText().toString();

            final Model model = Model.getInstance(LoginActivity.this.getApplication());
            model.login(email, password, new AbstractAPIListener() {
                @Override
                public void onLogin(Authentication authentication){
               
                    if(authentication.getSuccess().equals("true")) {
                        model.setAuth(authentication);
                        Toast.makeText(LoginActivity.this, "Login success!", Toast.LENGTH_LONG).show();

                        Intent intent = new Intent(LoginActivity.this, HomeActivity.class);
                        startActivity(intent);
                    }
                    else{
                        Toast.makeText(LoginActivity.this, "Invalid Login!", Toast.LENGTH_LONG).show();
                    }
                }
            });
        }
    });
syqv5f0l

syqv5f0l1#

您可以将访问令牌储存在“共享”偏好设置中

public static String gettitledecreption(Context context, String Key_name) {
    return PreferenceManager.getDefaultSharedPreferences(context).getString(Key_name, "");
}

public static void settitledecreption(Context context, String username ,String key_name) {
    SharedPreferences _sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = _sharedPreferences.edit();
    editor.putString(key_name, username);
    editor.commit();
}
nsc4cvqm

nsc4cvqm2#

Auth0提供了一个实用程序类来存储令牌。最好使用该实用程序库。有两个类可用于管理凭据:
1.凭据管理器以纯文本形式存储数据

  1. SecureCredentialsManager会在存储数据之前使用RSA和AES算法组合沿着Android KeyStore对数据进行加密。
    文档链接:Auth0.Android Save and Renew Tokens

相关问题